将os.system输出重定向到python中的文本文件

时间:2017-03-15 11:39:12

标签: python

尝试以下内容我将文件Import_Conf_Output.txt2创建为空,有人可以告诉我出了什么问题吗?

cmd1 = 'my command'
os.system(cmd1 + "1>&/home/s_admin/Import_Conf_Output.txt" + "2>&/home/s_admin/Error.txt")

2 个答案:

答案 0 :(得分:0)

你应该打电话给:

cmd1 = 'my command'
os.system(cmd1 + " 1>/home/s_admin/Import_Conf_Output.txt" + " 2>/home/s_admin/Error.txt")

答案 1 :(得分:0)

如评论和another answer中所述,您的命令字符串缺少空格。因此,您发送到shell的命令是:

my command1>&/home/s_admin/Import_Conf_Output.txt2>&/home/s_admin/Error.txt

也就是说,subprocess模块意味着取代os.system(以及其他类似的设备)。从docs,您的命令的替换将是:

subprocess.call('my command' + ' 1> /home/s_admin/Import_Conf_Output.txt 2> /home/s_admin/Error.txt', shell=True)

您可能希望查看子流程模块的文档,看看是否有更好的方法来完成您正在做的事情。

编辑:为了在给定命令行的情况下工作,还应该从重定向中删除&符号,因为不会合并不同的输出流。

但是,正如gbtimmon在评论中指出的那样,您可以在subprocess.call中指定stdout和stderr。以下行使用ls命令代替my command,将输出发送到ls.out。由于没有错误,ls.err为空。

subprocess.call('ls', stdout=open('ls.out', 'w'), stderr=open('ls.err', 'w'))