python 中的 curl 执行失败



我想下载大约 300 个项目的文件。下面是一个示例:

curl 'http://genome.jgi.doe.gov/ext-api/downloads/get-directory?organism=Absrep1' -b cookies > Absrep1.xml

这将打开页面并下载内容并将其存储为xml文件。

我尝试使用系统命令在perl中执行批处理脚本,例如

system('curl 'http://genome.jgi.doe.gov/ext-api/downloads/get-directory?organism=Absrep1'
-b cookies > Absrep1.xml');

但是,它没有用。有语法错误,我猜这是由于单引号造成的。

我尝试过使用python,

import subprocess
bash_com = 'curl "http://genome.jgi.doe.gov/ext-api/downloads/get-directory?organism=Absrep1" '
subprocess.Popen(bash_com)
output = subprocess.check_output(['bash','-c', bash_com])

它没有用。我收到错误,文件不存在。即使它有效,我如何包含

- b 饼干> Absrep1.xml'

参与其中?

请帮忙。提前致谢,

美联社

在 Perl 中,你应该能够使用它:

system(q{curl 'http://genome.jgi.doe.gov/ext-api/downloads/get-directory?organism=Absrep1' -b cookies > Absrep1.xml});

但是,您最好使用LWP甚至HTTP::Tiny(除非您需要cookie)而不是掏钱。对于更高级的用途,还有WWW::Mechanize。

语法错误几乎可以肯定归结为系统调用中的引号:

system('curl 'http://genome.jgi.doe.gov/ext-api/downloads/get-directory?organism=Absrep1' -b cookies > Absrep1.xml');

单引号需要转义,也可以使用替代括号,例如双引号或带有q或qq的自定义括号,例如:

system(q{curl 'http://genome.jgi.doe.gov/ext-api/downloads/get-directory?organism=Absrep1' -b cookies > Absrep1.xml});

从给出的上下文中很难判断,但是将curl调用包装在perl或python中可能是一种不太理想的方法。Perl 有 LWP,Python 有请求,bash shell 已经具备了运行简单批处理作业的能力。最好坚持使用一名口译员,除非有充分的理由不这样做。

最新更新