Убить скрипт Python из другого скрипта - CalledProcessError - PullRequest
0 голосов
/ 12 сентября 2018

Я хочу уничтожить скрипт 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])

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Оказывается, это была просто ошибка.

Решение было простым, я скопировал свой скрипт в новый файл, удалил старый и все заработало, просто так.

0 голосов
/ 14 сентября 2018

Это означает, что вызов pkill не удался. На ум приходят две возможные причины:

  • фактически не соответствует ни одному процессу. pkill в этом случае не генерирует никакого вывода и возвращает 1. Вы можете убедиться в этом, попытавшись запустить pgrep вместо pkill и посмотреть, что он вернул на stdout (должна быть одна или несколько строк с PID в случае совпадения) и / или он также возвратил ненулевой статус.

  • это действительно соответствует, но пользователь, под которым был выполнен 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.
...
...