Python 从子流程执行curl的正确方法是什么?
我试图从Python 从子流程执行curl的正确方法是什么?,python,curl,subprocess,Python,Curl,Subprocess,我试图从子流程调用curl来下载图像,但不断得到curl错误(错误代码2..,来自doc的错误代码是指curl\u FAILED\u INIT)。我没有使用urllib,因为我最终将使用子流程执行脚本。下面是代码片段 import subprocess import multiprocessing def worker(fname, k): f = open(fname, 'r') i = 0 for imgurl in f: try:
子流程调用curl
来下载图像,但不断得到curl错误(错误代码2..,来自doc的错误代码是指curl\u FAILED\u INIT
)。我没有使用urllib
,因为我最终将使用子流程执行脚本。下面是代码片段
import subprocess
import multiprocessing
def worker(fname, k):
f = open(fname, 'r')
i = 0
for imgurl in f:
try:
op = subprocess.call(['curl', '-O', imgurl], shell=False)
except:
print 'problem downloading image - ', imgurl
def main():
flist = []
flist.append(sys.argv[1])
flist.append(sys.argv[2])
...
for k in range(1):
p = multiprocessing.Process(target=worker, args=(flist[k],k))
p.start()
O/P:
curl:有关详细信息,请尝试“curl--help”或“curl--manual”
二,
curl:有关详细信息,请尝试“curl--help”或“curl--manual”
二,
..如果要运行shell命令,可以使用子进程。由于这可以在自己的进程中启动shell命令,因此使用多进程最多是多余的。当您希望在不同的进程中运行python程序的函数时,多处理非常方便。您似乎打算运行shell命令,而不是python函数
我不熟悉curl
。如果您想从curl
获取标准输出,请使用subprocess.Popen()
subprocess.call()
返回程序返回代码,而不是stdout
看
比如:
subp = subprocess.Popen(['curl', '-O', imgurl], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
curlstdout, curlstderr = subp.communicate()
op = str(curlstdout)
可能更近了。如我所说,不熟悉curl,因此您的程序可能会有所不同。不要试图阻止您。。。但是您看过Python的内置模块吗?您可以从Python内部下载图像,而无需向任何外部程序提供支持。您可以向我们展示一个使用示例:command+Output。