Я хочу перенаправить вывод и stderr в файл журнала. Достаточно просто, верно?
python3 /home/user/Utilities/gpu.py L1.py &> log_L1.py.txt &
Однако, когда вместо прямого вызова команды я использую системный вызов, я не получаю вывод и stderr в файлах, а скорее они возвращаются на мой экран и выходные файлы не создаются.
staggered_runner.py:
import time
import os
scripts=['L1.py','L2.py','L3.py','L4.py','L3_2D.py','L4_2D.py']
waiting=1200
for s in scripts:
command='python3 /home/user/Utilities/gpu.py '+s+' &> log_'+s+'.txt &'
print (command)
os.system (command)
time.sleep(waiting)
Затем я запускаю
python3 staggered_runner.py
Я ожидал получить только прямые выходы из staggered_runner.py
, то есть выходы каждого прогона print (command)
, а остальные направляются в соответствующие файлы.
Как я могу это сделать, все еще используя оболочку?
import subprocess, sys, shlex
try:
process = (subprocess.Popen(shlex.split(command),
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
shell=True, cwd="Pass desired directory in as string variable")
stdout, stderr = process.communicate()
используют shlex для создания команды и подпроцесса для выполнения его в командной строке.
подпроцесс. Popen Позволяет Вам устанавливать текущий рабочий каталог и настраивать канал для IPC.