我正在执行这样的SSH流程:
checkIn()
sshproc = subprocess.Popen([command], shell=True)
exit = os.waitpid(sshproc.pid, 0)[1]
checkOut()
重要的是,该流程在这些代码行之前和之后形成checkIn()
和checkOut()
操作。我有一个测试用例,涉及通过手动关闭终端窗口退出SSH会话。果然,我的程序运行不正常,在这种情况下永远不会调用checkOut()
。有人可以给我一个指针,指出我可以解决这个问题吗?
如果有任何其他信息有用,请告诉我。
谢谢!
答案 0 :(得分:1)
Python进程通常在与ssh
子进程相同的窗口中执行,因此在关闭该窗口时会突然终止 - 在有机会执行checkOut
之前。要尝试确保在程序退出时调用函数(但是对于足够突然的终止,取决于您的操作系统,可能没有保证),请尝试使用Python标准库模块atexit。
答案 1 :(得分:1)
也许您只需要一个try ... finally
块?
try:
checkIn()
sshproc = subprocess.Popen([command], shell=True)
exit = os.waitpid(sshproc.pid, 0)[1]
finally:
checkOut()
除非系统崩溃,否则流程会收到SIGKILL
等,应调用checkOut()
。