#python #subprocess #stdout
#python #подпроцесс #стандартный вывод
Вопрос:
Я пытаюсь запустить команду и перенаправить вывод в файл .txt, а также иметь возможность просматривать его в терминале с помощью subprocess.run()
. Ранее я использовал 2&&t;amp;1 | file.txt
для достижения этой цели, но хотел бы имитировать этот вариант с помощью subprocess.run() и shell = False
В настоящее время я могу успешно перенаправить stdout
на .txt.
, но я хотел бы иметь возможность видеть это и в терминале. Есть ли способ добиться этого? Я нахожусь на Python 3.6
with open(model_dest_dir 'Deepspeech_pro&ress.txt', 'w') as f:
train_model = subprocess.run(train_cmds, shell = False, cwd = '/home/', env = export_dict, stdout = f)
#for stdout_line in iter(train_model.stdout.readline, b''):
# print(stdout_line)
f.close()
Ответ №1:
Похоже, у меня есть рабочее решение, хотя и не с subprocess.run()
. Мне пришлось использовать Popen
вот так:
# train the model and write lo&s to .txt file
with open(model_dest_dir 'Deepspeech_pro&ress.txt', 'w') as f:
train_model_proc = subprocess.Popen(train_cmds, cwd = '//DeepSpeech/', env = export_dict, stdout = subprocess.PIPE, stderr = subprocess.STDOUT, universal_newlines = True)
for line in train_model_proc.stdout:
sys.stdout.write(line)
f.write(line)
train_model_proc.wait() # wait for Popen to finish
f.close()
Комментарии:
1.
train_cmds='deepspeech --model C:/deepspeech/deepspeech-0.6.0-models/output_&raph.pb --lm C:/deepspeech/deepspeech-0.6.0-models/lm.binary --trie C:/deepspeech/deepspeech-0.6.0-models/trie --audio C:/deepspeech/audio/8455-210777-0068.wav' with open('C:/Deepspeech_pro&ress.txt', 'w') as f: train_model_proc = subprocess.Popen(train_cmds, cwd = 'C:/', stdout = subprocess.PIPE, stderr = subprocess.STDOUT, universal_newlines = True) for line in train_model_proc.stdout: sys.stdout.write(line) f.write(line) train_model_proc.wait() f.close()
я пробовал этот cmd, но генерируется пустой файл2. не могли бы вы, пожалуйста, проверить этот cmd