我正在调用子进程,我希望将子进程输出写入已经打开的文件。我使用以下代码:
f1=open('solve.out','w')
#beginning of the programm writes to this file
f_err = open('mor.err', "w")
arguments=[file.exe,arg1,arg2,...]
p=subprocess.Popen(arguments,stdout=f1, stderr=f_err)
p.wait()
f1.close()
f_err.close()
这可以正常工作,因为我在程序中获得了.exe的实时输出。但是,输出都写在一行中。作为独立产品,输出显示为新行。
我尝试了universal_newlines或p.communicate()但没有成功。
编辑1:windows10 Python版本2.7.13
答案 0 :(得分:1)
您的程序似乎检测到输出被重定向到非控制台输出。
有一些方法可以让它相信它正在写入控制台的程序,但在你的情况下,可能存在一个简单的解决方法,即用换行替换6个空格。当然,如果空间出现在其他地方,这并不完美,但那是一个开始。
为此,您必须首先重定向到2个单独的管道(以避免在磁盘上读取/写入文件),替换空格,然后写入文件:
p=subprocess.Popen(arguments,stdout=subprocess.PIPE, stderr=subprocess.PIPE)
output,error = p.communicate()
f1.write(output.replace(" "*6,"\n"));
f_err.write(error.replace(" "*6,"\n"));