我正在尝试将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()
答案 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。