Python执行远程命令,不要等待返回

时间:2014-11-29 06:13:40

标签: python paramiko remotecommand

我正在测试corosync集群。我试图让具有浮动IP的接口失败,以确保资源通过python迁移到另一个节点。

现在的困境是我的命令确实在远程计算机上执行,但是我的测试代码永远挂起,等待它永远无法获得的回复 - 由于注入失败,thenode将重新启动。

ssh = SSHClient(self.get_ms_ip(ms),
                        self.get_ms_user(ms),
                        self.get_ms_password(ms))
ssh.connect()
self.logger.info("Failing FIP eth now on %s" % ms)
ssh.exec_command(cmd, timeout=1)
#Code never reached this comment.

在python中,如何发送命令并继续而不等待任何返回?我已经尝试使用subprocess.Popen包装我的ssh.exec_command,如Run Process and Don't Wait所示,但这并没有产生任何不同。

3 个答案:

答案 0 :(得分:2)

你不想要一个子进程,你想要一个线程。生成一个运行exec_command调用的线程,您将能够继续使用您的代码。

答案 1 :(得分:0)

你试过nohup吗?

ssh.exec_command('nohup %s &'%cmd, timeout=1)

答案 2 :(得分:0)

Python不能很好地处理线程;无法手动退出线程。我最终必须创建一个可以创建shh连接并运行exec_command的worker方法,该方法将作为单独的multiprocessing.Process运行。

通过这种方式,我可以在下一次测试运行之前正确地进行测试(作为python的单元测试框架的一部分)。