我试图从curl
调用subprocess
来下载图片,但不断出现卷曲错误(错误代码2 ..来自doc指的是CURL_FAILED_INIT
)。我没有使用urllib
因为我最终将使用subprocess
执行脚本。以下是代码段
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()
curl:尝试'curl --help'或'curl --manual'获取更多信息
2
curl:尝试'curl --help'或'curl --manual'获取更多信息
2
...
答案 0 :(得分:7)
如果要运行shell命令,则可以使用子进程。由于这可以在其自己的进程中启动shell命令,因此使用多处理最多是多余的。当你想在不同的进程中运行python程序的一个函数时,多处理就派上用场了。您似乎打算运行shell命令,而不是python函数。
我不熟悉curl
。如果您的目的是从curl
获取标准输出,请使用subprocess.Popen()
。 subprocess.call()
返回程序返回码,而不是stdout
。
请参阅http://docs.python.org/release/3.2/library/subprocess.html
类似的东西:
subp = subprocess.Popen(['curl', '-O', imgurl], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
curlstdout, curlstderr = subp.communicate()
op = str(curlstdout)
可能更接近。我说的不熟悉curl
,所以你的程序可能会有所不同。