Python输出CR CR LF?

时间:2012-07-12 18:19:04

标签: python python-3.x mingw eol

我正在编写一个测试脚本,它只是运行带有一些参数的* .EXE文件,然后将结果输出到文件中。我有一个* .sh测试脚本正确运行测试(但需要手动更新以进行更多测试)。此脚本中的行如下所示:

blah.exe arg1 arg2 arg3 > ../test/arg4/arg4.out

我编写了一个python脚本,根据一些简单的python模块自动生成参数(现在它非常粗糙):

import os
import subprocess

for test_dir in os.listdir():
    if not os.path.isdir(test_dir):
        continue
    # load a few variables from the ./test_dir/test_dir.py module
    test_module = getattr(__import__(test_dir, fromlist=[test_dir]), test_dir)

    # These arguments are relative paths, fix the paths
    arg1 = os.path.join(test_dir, test_module.ARG1)
    arg2 = os.path.join(test_dir, test_module.ARG2)
    arg3 = os.path.join(test_dir, test_module.ARG3)

    proc = subprocess.Popen(["../bin/blah.exe", arg1, arg2, arg3], stdout=subprocess.PIPE)

    stdout_txt = proc.stdout.read().decode("utf-8")

    with open(os.path.join(test_dir, test_dir + '.out'), 'w') as f:
        f.write(stdout_txt)

我已打开要比较的文件,当脚本正常工作时,我遇到了一个问题。第一个(shell)解决方案输出正确的行结束。第二个(python)解决方案输出以CR CR LF结尾的行。这在Notepad中看起来是正确的,但在Notepad ++中,每隔一行看起来都是空白的:

These lines should have no empty lines between them

为什么python的输出会给出不正确的行结尾?

如何更正行结尾?(将CR CR LF更改为CR LF而无需编写其他脚本)

1 个答案:

答案 0 :(得分:2)

尝试将universal_newlines=True参数用于Popen(请参阅http://docs.python.org/library/subprocess.html#popen-constructor)。