【发布时间】:2017-11-30 05:51:25
【问题描述】:
我正在调用一个子进程,我希望将子进程输出写入一个已经打开的文件。我正在使用以下代码:
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版
【问题讨论】:
-
你试过用十六进制编辑器检查文件吗?看看行尾是哪个字符?你能edit解释一下你正在运行哪个操作系统以及哪个版本的python?
-
尝试使用非 Windows 编辑器(Scite、notepad++、...)打开从 stdout/stderr 创建的文件。 Windows 期望
\n\r作为行尾,但 Python 只写\n。 -
@Jean-FrançoisFabre 我希望行缩进我得到“20 20 20 20 20 20”所以我认为有 6 个空格(我为记事本++安装了十六进制编辑器插件)
-
@MauriceMeyer。不,当文件以文本模式打开以进行写入时,python 会写入
\r\n。 -
你能复制/粘贴十六进制数据的 sn-p 吗?或(可读)图片,如果它太复杂?您能用
dir或其他已知程序重现问题,以便我们重现吗?一些程序会检测输出何时被重定向并且可以采取不同的行动。
标签: python subprocess popen