Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从子流程执行curl的正确方法是什么?_Python_Curl_Subprocess - Fatal编程技术网

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。