Что происходит с моим процессом? - PullRequest
1 голос
/ 14 сентября 2010

Я выполняю процесс SSH так:

checkIn()
sshproc = subprocess.Popen([command], shell=True)
exit = os.waitpid(sshproc.pid, 0)[1]
checkOut()

Важно, чтобы процесс формировал checkIn() и checkOut() действия до и после этих строк кода. У меня есть тестовый пример, который предполагает, что я выхожу из сеанса SSH, закрывая окно терминала вручную. Конечно, моя программа работает неправильно, и в этом случае checkOut() никогда не вызывается. Может кто-нибудь дать мне указатель на то, что я могу посмотреть, чтобы исправить эту ошибку?

Дайте мне знать, будет ли полезна любая другая информация.

Спасибо!

Ответы [ 2 ]

1 голос
/ 14 сентября 2010

Возможно, все, что вам нужно, это блок try ... finally?

try:
    checkIn()
    sshproc = subprocess.Popen([command], shell=True)
    exit = os.waitpid(sshproc.pid, 0)[1]
finally:
    checkOut()

Если система не падает, процесс получает SIGKILL и т. Д., Следует вызвать checkOut().

1 голос
/ 14 сентября 2010

Процесс Python обычно выполняется в том же окне, что и подпроцесс ssh, и, следовательно, прерывается так же внезапно, когда вы закрываете это окно, прежде чем получите шанс выполнить checkOut. Чтобы попытаться убедиться, что функция вызывается при выходе из программы (хотя для достаточно резких завершений, в зависимости от вашей ОС, гарантии могут не быть), попробуйте модуль стандартной библиотеки Python atexit .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...