Python 如何知道远程进程正在运行或已完成?
我正在使用Python库Paramiko在另一台服务器上通过ssh运行命令。我面临的问题是,Python 如何知道远程进程正在运行或已完成?,python,ssh,paramiko,Python,Ssh,Paramiko,我正在使用Python库Paramiko在另一台服务器上通过ssh运行命令。我面临的问题是,SSHClient.exec_command()调用立即返回,向我发送stdin、stdout、和stderr,并且没有其他方法告诉我进程是否仍在运行。我想我可能会尝试监视它返回的流是否仍然打开,但我找不到任何方法来执行此操作,除非尝试从stdout或stderr,或写入stdin并等待接收ValueError。有谁能告诉我一些我错过的应该有用的东西吗?感谢@fixxer的建议,我找到了我需要知道的东西。
SSHClient.exec_command()
调用立即返回,向我发送stdin
、stdout
、和stderr
,并且没有其他方法告诉我进程是否仍在运行。我想我可能会尝试监视它返回的流是否仍然打开,但我找不到任何方法来执行此操作,除非尝试从stdout
或stderr
,或写入stdin
并等待接收ValueError
。有谁能告诉我一些我错过的应该有用的东西吗?感谢@fixxer的建议,我找到了我需要知道的东西。我的测试代码现在如下所示:
import paramiko
import time
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('localhost', username='user', password='password')
transport = ssh.get_transport()
channel = transport.open_session()
channel.exec_command('./exec_test.py')
status = channel.recv_exit_status()
这个效果非常好。它会一直阻塞,直到命令完成,然后允许我继续。是否使用通道API?您可能需要开始使用Fabric:@ReutSharabani谢谢。布料看起来很有趣。我什么时候去看看。现在,我已经设法和帕拉米科合作了。正如您所知,fabric为我节省了很多时间来实现已经可用的东西。警告一句,如果命令输出足够大,足以填满管道,这将导致死锁。