Paramiko 的 invoke_shell() 方法怎么读取输出
时间: 2023-06-05 14:07:46 浏览: 1826
invoke_shell() 方法可以通过 send() 方法向远程服务器发送命令,并通过 recv() 方法获取远程服务器返回的结果。具体实现可以参考以下代码:
```
import paramiko
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname='example.com', username='user', password='pass')
shell = client.invoke_shell()
shell.send('ls -l\n')
while not shell.recv_ready():
pass
output = shell.recv(1024)
print(output)
```
上述代码连接到远程服务器 example.com ,使用用户名为 user ,密码为 pass ,然后执行 ls -l 命令并读取结果。其中 shell.send() 方法用于发送命令,shell.recv() 方法用于获取输出结果。
相关问题
paramiko invoke_shell
paramiko invoke_shell是一个Python库中的函数,用于在SSH连接上打开一个交互式的Shell。它可以让用户在远程主机上执行命令,并获取命令的输出。这个函数非常有用,可以用于自动化远程主机的管理和维护。
paramiko invoke_shell监测命令输出完毕
在使用`paramiko`的`invoke_shell()`方法开启一个交互式Shell之后,如果你想要监测命令输出直到其结束,你可以利用`channel.recv()`函数来获取逐行的输出,并通过检查返回的空字符串(EOF)来判断命令是否已经完成。这里是一个简单的示例:
```python
import paramiko
# ... 其他设置,如连接和认证省略 ...
# 开启交互式shell
transport = paramiko.Transport(sock)
transport.open_channel(kind='session')
channel = transport.channel
channel.invoke_shell()
output = ''
while True:
# 读取一行输出
line = channel.recv(1024)
if not line: # 当接收为空字符串,表示命令已结束
break
output += line.decode('utf-8') # 添加到总输出
print(line) # 打印实时接收的内容
# 关闭连接
channel.close()
transport.close()
```
在这个例子中,程序持续从通道接收数据,当接收到的行为空时(即命令执行完毕),跳出循环,关闭通道和运输层连接。
请注意,这个方法可能会阻塞,直到命令完全执行完毕。如果你有大量命令需要处理,可能需要考虑异步操作或者定期查询状态的方式。
阅读全文