Как перенаправить вывод команды в файл, когда команда выполняется через системный вызов оболочки?

Я хочу перенаправить вывод и 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), а остальные направляются в соответствующие файлы.

Как я могу это сделать, все еще используя оболочку?

1
задан 3 October 2019 в 17:31

1 ответ

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.

0
ответ дан 7 December 2019 в 18:33

Другие вопросы по тегам:

Похожие вопросы: