【问题标题】:Curl execution in python failedpython中的curl执行失败
【发布时间】:2017-07-05 13:47:28
【问题描述】:

我想下载大约 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 cookie > Absrep1.xml'

参与其中?

请帮忙。提前致谢,

AP

【问题讨论】:

标签: python-3.x perl subprocess


【解决方案1】:

在 Perl 中,你应该可以使用这个:

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

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

【讨论】:

    【解决方案2】:

    语法错误几乎肯定是系统调用中的引号引起的:

    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 已经具备运行简单批处理作业的能力。除非有充分的理由不这样做,否则最好坚持使用单一的口译员。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-01
      • 2013-03-01
      • 1970-01-01
      • 2016-10-09
      • 2023-03-15
      • 1970-01-01
      • 2017-11-25
      相关资源
      最近更新 更多