Python выводит CR CR LF?
Я нахожусь в процессе написания сценария тестирования, который просто запустит файл *.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++ каждая вторая строка выглядит пустой:
Почему выходные данные из python дают неправильные окончания строк?
Как я могу исправить окончания строк? (изменить CR CR LF на CR LF без необходимости писать другой скрипт)
1 ответ
Попробуйте использовать universal_newlines=True
аргумент Popen
(см. http://docs.python.org/library/subprocess.html).