paramiko等待命令结束
时间: 2024-07-31 08:01:55 浏览: 182
在使用`paramiko`库执行Linux命令时,如果你想让程序等待命令完全执行完毕后再继续,可以利用`Channel.recv`方法配合循环来读取命令的标准输出(stdout)和标准错误(stderr),直到接收缓冲区为空。下面是一个示例:
```python
import time
from paramiko import SSHClient, AutoAddPolicy
ssh = SSHClient()
ssh.set_missing_host_key_policy(AutoAddPolicy())
ssh.connect('hostname', username='username', password='password')
stdin, stdout, stderr = ssh.exec_command('long_running_command') # 假设long_running_command需要一段时间执行
output = b''
while True:
received_data = stdout.recv(1024) # 每次最多读取1024字节
if not received_data: # 如果无数据返回,说明命令已经结束
break
output += received_data
print(received_data.decode(), end='') # 打印接收到的内容
# 错误处理
if stderr.channel.recv_ready(): # 检查是否有错误输出
error_output = stderr.recv(1024).decode()
print(f"Error: {error_output}")
ssh.close()
```
在这个例子中,`recv`会阻塞直到有新的数据可用,所以整个循环会在命令执行结束后自行退出。
阅读全文
相关推荐















