当命令通过包装器的系统调用时,如何将命令的输出重定向到文件?

当命令通过包装器的系统调用时,如何将命令的输出重定向到文件?

我想将输出和 stderr 重定向到日志文件。很简单,对吧?

python3 /home/user/Utilities/gpu.py L1.py &> log_L1.py.txt &

但是,当我使用系统调用而不是直接调用命令时,我无法在文件中获取输出和 stderr,而是将它们返回到我的屏幕,并且不会创建输出文件。

交错的_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

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 来构建命令,并使用子进程在命令提示符中执行它。

subprocess.Popen 允许您设置当前工作目录并为 IPC 设置管道。

相关内容