我想将输出和 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 设置管道。