从另一个主脚本调用时从一个 python 脚本获取退出消息
Getting exit message from one python script when called from another master script
我有一个主要的 python 脚本,它使用 subprocess.check_call
到 运行 另外几个较小的脚本。
我不想看到这些小脚本的输出,所以我使用 stdout=DEVNULL
我可以通过捕获 CalledProcessError
来获取 returncode
但我想捕获传递的消息,如果脚本以 sys.exit('my exit message')
结尾
不过我似乎听不懂这条消息 - 这在 Python 中甚至可能吗?我宁愿不必写入文件来读取退出消息。
这是我在 master.py
:
中尝试过的
import subprocess
try:
subprocess.check_call('python scripttoberun.py', shell=True, stdout=subprocess.DEVNULL)
except subprocess.CalledProcessError as e:
print(e.args)
print(e.output)
print(e.stderr)
print(e.returncode)
print(e.cmd)
在我的 scripttoberun.py
:
import sys
print('starting... ')
sys.exit('im quitting')
但我似乎听不到 'im quitting
消息?
我只能看到这个输出:
(1, 'python scripttoberun.py')
None
None
1
python scripttoberun.py
这可能吗?
非常感谢!
我设法让它工作,我必须将 stderr=PIPE
参数传递给 check_output
函数。然后通过在 stderr
异常上使用 .decode()
我可以获得消息。完美
这是我在 master.py
中的代码:
from subprocess import check_output, CalledProcessError, PIPE
try:
check_output('python scripttoberun.py', stderr=PIPE)
print('Program ran successfully')
except CalledProcessError as e:
print('Program did not run successfully: ', e.stderr.decode())
我有一个主要的 python 脚本,它使用 subprocess.check_call
到 运行 另外几个较小的脚本。
我不想看到这些小脚本的输出,所以我使用 stdout=DEVNULL
我可以通过捕获 CalledProcessError
来获取 returncode
但我想捕获传递的消息,如果脚本以 sys.exit('my exit message')
不过我似乎听不懂这条消息 - 这在 Python 中甚至可能吗?我宁愿不必写入文件来读取退出消息。
这是我在 master.py
:
import subprocess
try:
subprocess.check_call('python scripttoberun.py', shell=True, stdout=subprocess.DEVNULL)
except subprocess.CalledProcessError as e:
print(e.args)
print(e.output)
print(e.stderr)
print(e.returncode)
print(e.cmd)
在我的 scripttoberun.py
:
import sys
print('starting... ')
sys.exit('im quitting')
但我似乎听不到 'im quitting
消息?
我只能看到这个输出:
(1, 'python scripttoberun.py')
None
None
1
python scripttoberun.py
这可能吗?
非常感谢!
我设法让它工作,我必须将 stderr=PIPE
参数传递给 check_output
函数。然后通过在 stderr
异常上使用 .decode()
我可以获得消息。完美
这是我在 master.py
中的代码:
from subprocess import check_output, CalledProcessError, PIPE
try:
check_output('python scripttoberun.py', stderr=PIPE)
print('Program ran successfully')
except CalledProcessError as e:
print('Program did not run successfully: ', e.stderr.decode())