首页 > 解决方案 > 如何在 python 中执行非阻塞脚本并获取其返回码?

问题描述

我正在尝试从 python 执行非阻塞 bash 脚本并获取其返回码。到目前为止,这是我的功能:

def run_bash_script(script_fullname, logfile):
    my_cmd = ". " + script_fullname + " >" + logfile +" 2>&1"
    p = subprocess.Popen(my_cmd, shell=True)
    os.waitpid(p.pid, 0)
    print(p.returncode)

如您所见,所有输出都被重定向到一个日志文件中,我可以在 bash 进程运行时对其进行监控。

但是,最后一个命令只返回“无”而不是有用的退出代码。

我在这里做错了什么?

标签: pythonbashsubprocess

解决方案


您应该使用p.wait()而不是os.waitpid(). os.waitpid()是一个低级 api,它对对象一无所知,Popen因此无法触摸p


推荐阅读