Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何知道远程进程正在运行或已完成?_Python_Ssh_Paramiko - Fatal编程技术网

Python 如何知道远程进程正在运行或已完成?

Python 如何知道远程进程正在运行或已完成?,python,ssh,paramiko,Python,Ssh,Paramiko,我正在使用Python库Paramiko在另一台服务器上通过ssh运行命令。我面临的问题是,SSHClient.exec_command()调用立即返回,向我发送stdin、stdout、和stderr,并且没有其他方法告诉我进程是否仍在运行。我想我可能会尝试监视它返回的流是否仍然打开,但我找不到任何方法来执行此操作,除非尝试从stdout或stderr,或写入stdin并等待接收ValueError。有谁能告诉我一些我错过的应该有用的东西吗?感谢@fixxer的建议,我找到了我需要知道的东西。

我正在使用Python库Paramiko在另一台服务器上通过ssh运行命令。我面临的问题是,
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为我节省了很多时间来实现已经可用的东西。警告一句,如果命令输出足够大,足以填满管道,这将导致死锁。