如何将subprocess.call的结果打印到python脚本中的文件

时间:2015-10-09 16:28:01

标签: python windows python-3.x command jira

我有一个python脚本,我在其中调用JIRA API并从JIRA获取一些内容,我想将其写入文件。

cmd中的这个命令工作正常

curl -D- -u username:password -X GET --data @file.json -H "Content-Type: application/json" http:URL >> output.json

但是,当我尝试在Python中执行相同操作时,它不会写入我的文件(直接转到我的“有问题”)

#Runs curl script to get component
def write():
    name = 'output.json'

try:
    file= open(name, 'w')
    file.write(subprocess.call('curl -D- -u username:password -X GET --data @file.json -H "Content-Type: application/json" http:URL'))
    file.close()

except:
    print('something is wrong')
    sys.exit(0)
write()

我也试着让它写下一个变量的内容。

curler = (subprocess.call('curl -D- -u username:password -X GET --data @file.json -H "Content-Type: application/json" http:URL'))

def write():
    name = 'output.json'

try:
    file = open(name, 'w')
    file.write(curler)
    file.close()

except:
    print('something is wrong')
    sys.exit(0)
write()

我正在使用Windows 7和Python 3

2 个答案:

答案 0 :(得分:3)

subprocess.call()获取参数列表,只返回被调用进程的退出状态。我想您正在尝试将标准输出重定向到文件:

curl = ['curl', '-D-', '-u', 'username:password', '-X', 'GET', '--data',
        '@file.json', '-H', 'Content-Type: application/json', 'http:URL']
with open('output.json', 'w') as file:
    status = subprocess.call(curl, stdout=file)

答案 1 :(得分:1)

1-您获得异常的原因是您将参数传递给子进程的方式。您应该为子进程提供args列表而不是单个字符串。假设您想使用curl下载google.com:

subprocess.call(['curl', 'google.com'])

2- subprocess.call返回退出代码,而不是输出。要将输出重定向到文件:

subprocess.call(['curl', 'google.com'], stdout=open('myFileName', 'w'))