我正在尝试使用带有exec命令的php执行python脚本:
exec("python /address/to/script.py");
我不需要脚本运行完成,因此在完成我需要的操作后,我会从其中调用sys.exit()
。执行被传递回php脚本,这很好,但是python进程仍在运行。我可以在服务器的进程列表中看到它。还有更多需要完全杀死它吗?
其他信息
python脚本是由第三方编写的。
我对python知之甚少,足以添加sys.exit()
来电。
答案 0 :(得分:0)
该脚本仍然可以执行一些清理代码,或者您可以从子进程调用sys.exit()
,该进程实际上将调用thread.exit()
,使父进程保持运行。
检查sys.exit()
调用是否在脚本的主要部分,并且没有错误处理干扰SystemExit
例外,或者您可以尝试os._exit()
。还要确保传递给&
的命令中不存在&符号(exec()
),因为这会导致脚本作为后台进程运行。
注意 os._exit()
不利,因为它没有进行任何清理,并且基本上会立即结束这个过程。
修改要从try
块中结束脚本,您可以执行以下操作:
try:
# Existing Code
except SysExit:
os._exit() # quit the process
except:
# Existing error handling
理想情况下,应用程序逻辑应该使用消息传递或类似的东西,以便子线程可以通知主线程它应该终止。