为什么os.system无法重定向到文件?如何启用?

时间:2015-11-23 08:28:16

标签: python

我正在尝试将stdout重定向到一个文件,其中正在重定向打印语句,但 os.system o / p 不是。

From This我尝试使用">" 运算符,但没有为我工作。

我不想使用subprocess或popen,

以下是示例代码。

任何人都可以帮忙吗?

def ExecCMS_AGT_DB(cmd):
        sys.stdout=open(cmd+'.txt','w')
        print "\ncmd $: "+cmd+" start"
        os.system(cmd+" start")
        print "\ncmd $: "+cmd+" stop"
        os.system(cmd+" stop")
        sys.stdout.close()

def ExecCmd():
        OldStdout=sys.stdout
        ExecCMS_AGT_DB("srocms")
        sys.stdout=OldStdout

#if __name__=="__main__":
        ExecCmd()

1 个答案:

答案 0 :(得分:3)

为什么您要使用subprocess?这是迄今为止最简单的解决方案。有关更多详细信息,请参阅https://stackoverflow.com/a/3982683/2314532,但使用subprocess.call()重定向输出的要点归结为:

f = open("outputFile","wb")
subprocess.call(argsArray,stdout=f)

所以您发布的代码将成为:

import subprocess

def ExecCMS_AGT_DB(cmd):
        outfile = open(cmd+'.txt','w')
        print "\ncmd $: "+cmd+" start"
        subprocess.call([cmd, "start"], stdout=outfile)
        print "\ncmd $: "+cmd+" stop"
        subprocess.call([cmd, "stop"], stdout=outfile)
        outfile.close()

def ExecCmd():
        ExecCMS_AGT_DB("srocms")

if __name__=="__main__":
        ExecCmd()

无需保存&恢复sys.stdout,没有什么复杂的。只需将参数stdout提供给subprocess.call,您就解决了问题。轻松,简单,以及Python。