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

将os.system输出重定向到python中的文本文件,python,Python,尝试下面的方法,我得到一个文件Import\u Conf\u Output.txt2创建为空,有人能告诉我怎么了吗 cmd1 = 'my command' os.system(cmd1 + "1>&/home/s_admin/Import_Conf_Output.txt" + "2>&/home/s_admin/Error.txt") 您的电话应为: cmd1 = 'my command' os.system(cmd1 + " 1>/home/s_admin/

尝试下面的方法,我得到一个文件
Import\u Conf\u Output.txt2
创建为空,有人能告诉我怎么了吗

cmd1 = 'my command'
os.system(cmd1 + "1>&/home/s_admin/Import_Conf_Output.txt" + "2>&/home/s_admin/Error.txt")
您的电话应为:

cmd1 = 'my command'
os.system(cmd1 + " 1>/home/s_admin/Import_Conf_Output.txt" + " 2>/home/s_admin/Error.txt")
如注释和中所述,您的命令字符串缺少空格。因此,您发送给shell的命令是:

my command1>&/home/s_admin/Import_Conf_Output.txt2>&/home/s_admin/Error.txt
这就是说,该模块旨在取代os.system(和其他类似设备)。从中,您的命令替换为:

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命令
,将输出发送到ls.out。由于没有错误,ls.err为空

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

确定你的命令正在输出什么?我猜在
“1>&…”的开头有一个空格。
是的,它正在创建一个文件Import_Conf_Output.txt2,但是当直接从cmd行执行时:my cmd 1>&/home/s_admin/Import_Conf_Output.txt它工作得很好可能是字符串开头缺少空格:)他真的应该使用
子进程调用([command],stdout=open(file1,“w”),stderr=open(file2,“w”))
尝试使用空格和子进程,现在文本文件包含消息“/bin/sh:/home/s_admin/Error.txt:不明确重定向”@RashmiG:去掉符号(&”)。这意味着您想将多个流重定向到一个文件,但这不是您要做的。@gbtimmon:谢谢您的建议。我不记得怎么做了,也没有时间研究我最初键入答案的时候。我已经编辑添加了。@RashmiG:请查看更新的答案。正如gbtimmon所说,方法是直接为指定stdout&stderr参数。尝试了这个方法没有成功,现在文本文件包含消息“/bin/sh:/home/s_admin/Error.txt:dimensional redirect”ok,那么我建议使用subprocess.Popen()而不是使用stdout=subprocess.pipe,首先创建文件并在此处使用其文件描述符,例如sdout=error\u files。它应该会起作用。