我的流程发生了什么?

时间:2010-09-14 04:25:04

标签: python process

我正在执行这样的SSH流程:

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

重要的是,该流程在这些代码行之前和之后形成checkIn()checkOut()操作。我有一个测试用例,涉及通过手动关闭终端窗口退出SSH会话。果然,我的程序运行不正常,在这种情况下永远不会调用checkOut()。有人可以给我一个指针,指出我可以解决这个问题吗?

如果有任何其他信息有用,请告诉我。

谢谢!

2 个答案:

答案 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()