gpt4 book ai didi

python子进程popen nohup并返回代码

转载 作者:太空宇宙 更新时间:2023-11-04 10:43:41 25 4
gpt4 key购买 nike

我有以下代码:

    argpass = ['nohup']
argpass.append('/path/to/script')

log_output_err = open(log_file,'a+')
out = subprocess.Popen(argpass,
stdout = log_output_err,
stderr = log_output_err)

#if the script fails I need to have some logic here...

我只是想知道如何获得/path/to/script 的返回码。

也许我只需要在/path/to/script 中插入逻辑,有什么想法吗?

谢谢,

最佳答案

subprocess.Popen 对象具有您可以访问的 returncode 属性:

http://docs.python.org/2/library/subprocess.html#subprocess.Popen.returncode

您还可以查看使用 check_call 便利函数:

http://docs.python.org/2/library/subprocess.html#subprocess.check_call

只有当返回码为零时才会返回;否则,它将引发 CalledProcessError(您可以从中读取 returncode 属性)。

您的示例中,stdout 和 stderr 指向调用 Python 脚本而不是日志文件:

>>> import subprocess
>>> argpass = ['echo']
>>> argpass.append('hello world')
>>> # I reroute to PIPE because I don't have a logfile
>>> log_output_err = subprocess.PIPE
>>> out = subprocess.Popen(argpass,
stdout = log_output_err,
stderr = log_output_err)
>>> output,error = out.communicate()
>>> print output
hello world

>>> # Check if child process has terminated.
>>> # If it has finished, will return returncode attribute.
>>> # Otherwise, it returns None
>>> out.poll()
0
>>> # Or we can read the returncode attribute directly:
>>> out.returncode # Direct
0
>>>

如果您的进程需要很长时间才能完成,则在您检查它时可能未设置 returncode 值。如果 returncode 的值为 None,则表示您的子进程尚未终止。您可以停止执行脚本,直到子进程使用 .wait() 方法终止。

关于python子进程popen nohup并返回代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18989242/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com