我在unix shell中运行这个curl命令,它可以工作(见下文)。我能够将返回的数据重定向到一个文件,但现在我想在我的代码中处理数据,而不是在文件中浪费一大堆空间。
curl -k -o outputfile.txt 'obfuscatedandVeryLongAddress'
#curl command above, python representation below
addr = "obfuscatedandVeryLongAddress"
theFile = subprocess.Popen(["curl", "-k", addr], stdout = subprocess.PIPE, stderr = subprocess.PIPE, shell = True)
在此之后out, err = theFile.communicate()
然后打印out变量但仍然没有
编辑:格式化和澄清
答案 0 :(得分:2)
您需要删除shell=True
。
theFile = subprocess.Popen(["curl", "-k", addr], stdout = subprocess.PIPE, stderr = subprocess.PIPE)
应该工作。
如果你shell=True
,你应该传递一个字符串。否则,您实际执行的操作是将这些参数-k
和addr
作为参数传递给shell。因此,如果您的shell为sh
,那么您所做的就是sh 'curl' -k addr
。
答案 1 :(得分:0)
requests
库时添加一个,因为它需要更少的代码,并且对于需要查看代码的任何人来说都更容易阅读(并且具有跨平台的优势)。
import requests
response = requests.get('longaddress', verify=False)
print response.text
如果响应是json,则可以自动将其转换为python对象
print response.json()
答案 2 :(得分:0)
您可以将curl命令放在如下字符串中:
theFile = subprocess.Popen('curl -k {}'.format(addr), stdout = subprocess.PIPE, stderr = subprocess.PIPE, shell = True)
或者你可以删除shell参数:
theFile = subprocess.Popen(["curl", "-k", addr], stdout = subprocess.PIPE, stderr = subprocess.PIPE)
或者您可以使用pycurl模块直接使用libcurl库并跳过整个附加过程。