从另一个脚本中终止 python 脚本 - CalledProcessError
Kill a python script from another script - CalledProcessError
我想从另一个 python 脚本终止在我的系统上运行的 python 脚本。
我遵循这个 并稍微调整了代码,但出现错误:
Traceback (most recent call last): File "/home/pi/base.py", line 13, in <module>
check_call(["pkill", "-9", "-f", script])
File "/usr/lib/python2.7/subprocess.py", line 540, in check_call
raise CalledProcessError(retcode, cmd)
CalledProcessError: Command '['pkill', '-9', '-f', '/home/pi/MotionDetector.py']' returned non-zero exit status 1
代码:
from subprocess import check_call
import sys
import time
script = '/home/pi/MotionDetector.py'
check_call(["pkill", "-9", "-f", script])
这意味着 pkill
调用失败。想到两个可能的原因:
实际上没有匹配到任何进程。 pkill
在这种情况下不会生成任何输出,return 1
。您可以通过尝试 运行 pgrep
而不是 pkill
来验证这一点,并查看 return 在 stdout
上做了什么(应该是带有 PID 的一行或多行在匹配的情况下)and/or它是否也return输入了一个非零状态。
确实匹配,但是执行pkill的用户无法杀死匹配的进程。在这种情况下,pkill
应该在 stderr
上生成类似于:pkill: killing pid 3244 failed: Operation not permitted
的输出
来自 pkill(1)
手册页:
EXIT STATUS
...
1 No processes matched or none of them could be signalled.
...
事实证明这只是一个错误。
解决方案很简单,我将我的脚本复制到一个新文件,删除了旧文件,然后就可以了,就这么简单。
我想从另一个 python 脚本终止在我的系统上运行的 python 脚本。
我遵循这个
Traceback (most recent call last): File "/home/pi/base.py", line 13, in <module>
check_call(["pkill", "-9", "-f", script])
File "/usr/lib/python2.7/subprocess.py", line 540, in check_call
raise CalledProcessError(retcode, cmd)
CalledProcessError: Command '['pkill', '-9', '-f', '/home/pi/MotionDetector.py']' returned non-zero exit status 1
代码:
from subprocess import check_call
import sys
import time
script = '/home/pi/MotionDetector.py'
check_call(["pkill", "-9", "-f", script])
这意味着 pkill
调用失败。想到两个可能的原因:
实际上没有匹配到任何进程。
pkill
在这种情况下不会生成任何输出,return1
。您可以通过尝试 运行pgrep
而不是pkill
来验证这一点,并查看 return 在stdout
上做了什么(应该是带有 PID 的一行或多行在匹配的情况下)and/or它是否也return输入了一个非零状态。确实匹配,但是执行pkill的用户无法杀死匹配的进程。在这种情况下,
pkill
应该在stderr
上生成类似于:pkill: killing pid 3244 failed: Operation not permitted
的输出
来自 pkill(1)
手册页:
EXIT STATUS ... 1 No processes matched or none of them could be signalled. ...
事实证明这只是一个错误。
解决方案很简单,我将我的脚本复制到一个新文件,删除了旧文件,然后就可以了,就这么简单。