如何执行OS命令的结果并将其保存到文件中

时间:2015-06-06 13:17:53

标签: python python-2.7 subprocess

在python 2.7中,我想执行一个操作系统命令(例如,UNIX中的' ls -l')并将其输出保存到文件中。我不希望执行结果显示在文件以外的任何其他位置。

这是否可以在不使用os.system的情况下实现?

3 个答案:

答案 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来重定向。我不确定你是否可以使用同一个文件。