синхронизация и перенаправление подпроцесса: вывод PIPE в файл - PullRequest
0 голосов
/ 03 сентября 2018

Я пытаюсь выполнить bash и хочу перенаправить вывод из оболочки в файл

это то, что я имею до сих пор

baby = subprocess.Popen('some command', stdout = subprocess.PIPE, shell = True)
print (baby.stdout.readlines()) #i wanna see it in console
with open("log.txt","a") as fobj: #wanna create a file log.txt and save the output there as string                                 
        fobj.write(stdout)

но я получаю эту ошибку NameError: name 'stdout' is not defined

Я посмотрел на этот вопрос Запустить подпроцесс и распечатать вывод в журнал , subprocess.Popen () не перенаправляет вывод в файл , Можете ли вы сделать Подпроцесс Python выводит stdout и stderr как обычно, но также записывает вывод в виде строки? но безрезультатно, они были слишком сложны для меня, я заблудился во всем коде ..

я не могу просто перенаправить стандартный вывод в обычный текстовый файл? и есть ли способ, которым я могу построить функцию, чтобы рассчитать время выполнения этого сценария и поместить его в тот же файл log.txt (я использую time ./myscript.py, чтобы взять время, но я также не знаю, как перенаправить его на текстовый файл)

1 Ответ

0 голосов
/ 03 сентября 2018

Вы должны настроить этот пример так, как вам удобно

Сначала создайте файл input.txt

Тогда

import sys

with open(sys.argv[1], 'r') as input, open(sys.argv[2], 'w') as output:
    for line in input:
        output.write(str(line.strip()) + '\n')

Вы запускаете его из командной строки (s4.py, вы можете переименовать его)

python s4.py input.txt output.txt

выход

obama
is
my boss

Вы можете догадаться, но вывод совпадает с вводом.

...