使用windows shell'>'将输出重定向到文本文件在python中

时间:2013-01-02 21:13:06

标签: python windows shell

在我的python脚本中, 我正在尝试运行一个打印输出的Windows程序。 但我想将该输出重定向到文本文件。 我试过了

     command = 'program' + arg1 + ' > temp.txt'
     subprocess.call(command)

其中program是我的程序名,arg1是参数。 但它不会将输出重定向到文本文件 它只是在屏幕上打印出来。

任何人都可以帮我怎么做? 谢谢!

2 个答案:

答案 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)