redirect输出到一个文本文件使用Windows shell'>'在Python中

在我的Python脚本中,我试图运行一个Windows程序打印输出。 但是我想将输出redirect到一个文本文件。 我试过了

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

程序是我的程序名称,arg1是参数。 但它不会将输出redirect到文本文件它只是将其打印在屏幕上。

任何人都可以帮助我如何做到这一点? 谢谢!

将文件对象传递给subprocess.call()stdout参数:

 with open('myoutfilename', 'w') as myoutfile: subprocess.call(cmd, stdout=myoutfile) 

你可以在subprocess.call使用shell=True

但是,更好的方法是:

 command = ['program',arg1] with open('temp.txt','w') as fout: subprocess.call(command,stdout=fout) 

这从整个东西中删除了shell,使得它更独立于系统,而且它也使得你的程序免于“shell注入”攻击(考虑arg1='argument; rm -rf ~'或者任何类似的窗口)。

上下文管理器( with语句)是一个好主意,因为它可以保证当你离开“上下文”时你的文件对象被正确地刷新和关闭。

请注意,如果您对subprocess.Popen (或类似的)类不使用shell=True ,则应该将参数作为列表传递,而不是字符串。 你的代码将会更加健壮。 如果你想使用一个字符串,python提供了一个方便的函数shlex.split来将一个字符串拆分成与你的shell一样的参数。 例如:

  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)