在我的python脚本中, 我正在尝试运行一个打印输出的Windows程序。 但我想将该输出重定向到文本文件。 我试过了
command = 'program' + arg1 + ' > temp.txt'
subprocess.call(command)
其中program是我的程序名,arg1是参数。 但它不会将输出重定向到文本文件 它只是在屏幕上打印出来。
任何人都可以帮我怎么做? 谢谢!
答案 0 :(得分:9)
将文件对象传递给stdout
的{{1}}参数:
subprocess.call()
答案 1 :(得分:5)
您可以在shell=True
subprocess.call
然而,(更好)这样做的方法是:
command = ['program',arg1]
with open('temp.txt','w') as fout:
subprocess.call(command,stdout=fout)
这使得shell从整个系统中移除,使其更加独立于系统,并且它还使您的程序免受“shell注入”攻击(考虑arg1='argument; rm -rf ~'
或等效的Windows)。
上下文管理器(with
语句)是一个好主意,因为它可以保证在离开“上下文”时正确刷新和关闭文件对象。
请注意,如果您未将shell=True
用于subprocess.Popen
(或类似)类,则应将参数作为列表而不是字符串传递。您的代码将以这种方式更加强大。如果你想使用一个字符串,python提供了一个方便函数shlex.split
来将一个字符串拆分成参数,就像你的shell一样。 e.g:
import subprocess
import shlex
with open('temp.txt','w') as fout:
cmd = shlex.split('command argument1 argument2 "quoted argument3"'
#cmd = ['command', 'argument1', 'argument2', 'quoted argument3']
subprocess.call(cmd,stdout=fout)