在python 2.7中,我想执行一个操作系统命令(例如,UNIX中的' ls -l')并将其输出保存到文件中。我不希望执行结果显示在文件以外的任何其他位置。
这是否可以在不使用os.system的情况下实现?
答案 0 :(得分:3)
使用subprocess.check_call
将stdout重定向到文件对象:
from subprocess import check_call, STDOUT, CalledProcessError
with open("out.txt","w") as f:
try:
check_call(['ls', '-l'], stdout=f, stderr=STDOUT)
except CalledProcessError as e:
print(e.message)
当命令返回非零退出状态时,无论你做什么都应该在except中处理。如果你想要一个stdout文件和另一个文件来处理stderr打开两个文件:
from subprocess import check_call, STDOUT, CalledProcessError, call
with open("stdout.txt","w") as f, open("stderr.txt","w") as f2:
try:
check_call(['ls', '-l'], stdout=f, stderr=f2)
except CalledProcessError as e:
print(e.message)
答案 1 :(得分:1)
假设您只想运行命令将其输出转到文件中,您可以使用subprocess
模块,如
subprocess.call( "ls -l > /tmp/output", shell=True )
虽然这不会重定向stderr
答案 2 :(得分:1)
您可以打开一个文件并将其作为subprocess.call
参数传递给stdout
,而stdout
的输出将转到该文件。
import subprocess
with open("result.txt", "w") as f:
subprocess.call(["ls", "-l"], stdout=f)
它不会捕获stderr
的任何输出,但必须通过将文件作为subprocess.call
参数传递给stderr
来重定向。我不确定你是否可以使用同一个文件。