运行 shell 后台脚本

Run a shell script in background

我有一个 shell 脚本,我正在使用 os.system("./name_of_script")

在 Python 中调用它

我更愿意根据用户输入进行此调用(即用户键入 "start" 并且调用已完成,并且 python 程序中的其他一些内容也已完成,当用户输入 "stop" 脚本终止)但我发现这个调用占据了终端上的全部焦点(我真的不知道正确的词,但基本上整个程序在这个调用上停止,因为我的 shell 脚本执行直到接收到键盘中断)。然后,当我执行键盘中断时,那是 shell 脚本停止执行并随后执行其余代码的唯一时刻。这在 python 中可行吗?

简单地构造一个Popen对象,如:

p = subprocess.Popen(['./name_of_script'])

...启动指定程序而不阻止它完成。

如果您稍后想查看它是否已完成,您可以查看 p.poll() 以获取其状态更新。

这也比 os.system() 更快更安全,因为它不涉及 shell(除非您调用的脚本自己运行),因此您不会暴露shell 震惊、shell 注入漏洞或其他 shell 相关的不必要问题。