curl工作正常,除非我用子进程调用它

She*_*ena 8 python https curl

我的卷发看起来有点像这样:

curl -1 -X POST --user "xxx:yyy" -d "status=new&content=issue+details+at%3A+http%3A%2F%2Flocalhost%3A6543%2Ftest%2Fsubmit%2F16-07-03-H-20-18-&kind=bug&title=QA+Fail&responsible=xxx&priority=critical"  "https://api.bitbucket.org/1.0/repositories/my/repo/issues"
Run Code Online (Sandbox Code Playgroud)

如果我打开一个终端并执行它它工作正常(在bitbucket中创建一个问题)

如果我尝试通过子进程执行相同的curl,它就会失败:

sCmd = "curl....etc"
lCmd = [s for s in sCmd.split() if s]
subprocess.call(lCmd)
Run Code Online (Sandbox Code Playgroud)

我收到错误消息:

curl: (1) Protocol "https not supported or disabled in libcurl
Run Code Online (Sandbox Code Playgroud)

我不明白为什么完全相同的命令在Python中的工作方式如此不同.有任何想法吗?

顺便说一句,这不使用virtualenv.而且我知道事实的内容lCmd是有效的

PS:是的,我知道我应该使用请求.不幸的是,请求给了我类似的问题.

She*_*ena 0

如果这有用,请投票支持 Andrae 的答案,它让我走上了正确的道路。

查看错误消息:

curl: (1) Protocol "https not supported or disabled in libcurl
Run Code Online (Sandbox Code Playgroud)

一方面看到"https问题,https另一方面工作正常。

问题是我认为应该将参数字符串括在引号中。

因此有两种简单的方法可以解决这个问题:

lCmd = shlex.split(sCmd)
subprocess.call(lCmd) 
Run Code Online (Sandbox Code Playgroud)

或者

import os
os.system(sCmd)
Run Code Online (Sandbox Code Playgroud)