运行 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 相关的不必要问题。
我有一个 shell 脚本,我正在使用 os.system("./name_of_script")
我更愿意根据用户输入进行此调用(即用户键入 "start" 并且调用已完成,并且 python 程序中的其他一些内容也已完成,当用户输入 "stop" 脚本终止)但我发现这个调用占据了终端上的全部焦点(我真的不知道正确的词,但基本上整个程序在这个调用上停止,因为我的 shell 脚本执行直到接收到键盘中断)。然后,当我执行键盘中断时,那是 shell 脚本停止执行并随后执行其余代码的唯一时刻。这在 python 中可行吗?
简单地构造一个Popen
对象,如:
p = subprocess.Popen(['./name_of_script'])
...启动指定程序而不阻止它完成。
如果您稍后想查看它是否已完成,您可以查看 p.poll()
以获取其状态更新。
这也比 os.system()
更快更安全,因为它不涉及 shell(除非您调用的脚本自己运行),因此您不会暴露shell 震惊、shell 注入漏洞或其他 shell 相关的不必要问题。