你可以使用POPEN,檢查標準錯誤:
from subprocess import Popen,PIPE
proc = Popen(["EXEC"], stderr=PIPE,stdout=PIPE,universal_newlines=True)
out, err = proc.communicate()
if err:
with open("std.err","w") as f:
f.write(err)
在一個側面說明,如果你關心你應該使用check_call
返回代碼,你可以用NamedTemporaryFile
結合起來:
from tempfile import NamedTemporaryFile
from os import stat,remove
from shutil import move
try:
with NamedTemporaryFile(dir=".", delete=False) as err:
subprocess.check_call(["exec"], stderr=err)
except (subprocess.CalledProcessError,OSError) as e:
print(e)
if stat(err.name).st_size != 0:
move(err.name,"std.err")
else:
remove(err.name)
感謝它的完美運作。唯一的辦法是命名與用於存儲錯誤的var不同的文件。 – Marco
@Marco,真的,我只是複製粘貼,我總是通常使用'f'。 –