paramiko invoke_shell监测命令输出完毕
时间: 2024-10-24 09:10:05 浏览: 75
在使用`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()
```
在这个例子中,程序持续从通道接收数据,当接收到的行为空时(即命令执行完毕),跳出循环,关闭通道和运输层连接。
请注意,这个方法可能会阻塞,直到命令完全执行完毕。如果你有大量命令需要处理,可能需要考虑异步操作或者定期查询状态的方式。
相关问题
paramiko invoke_shell
`paramiko` is a Python library used for remote SSH and SFTP connections. The `invoke_shell` method is a part of the `SSHClient` class provided by `paramiko`. It creates an interactive shell session on the remote host and returns a channel object that can be used to send and receive data to and from the shell.
Here's an example usage of `invoke_shell`:
```python
import paramiko
# establish an SSH connection
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('remote_host', username='username', password='password')
# invoke a shell on the remote host
channel = ssh.invoke_shell()
# send a command to the shell
channel.send('ls\n')
# receive the output of the command
output = channel.recv(1024)
# close the shell session and the SSH connection
channel.close()
ssh.close()
```
In this example, `invoke_shell` is used to create a shell session on the remote host. The `send` method is used to send a command (in this case, `ls`) to the shell, and the `recv` method is used to receive the output of the command. Finally, the `close` method is used to close the shell session and the SSH connection.
python paramiko invoke_shell
`paramiko` 是一个 Python 的 SSH 库,可以用来连接远程服务器并执行命令。`invoke_shell` 方法可以打开一个交互式的 shell,可以在其中执行多个命令。
使用 `invoke_shell` 方法时,需要注意以下几点:
1. `invoke_shell` 方法返回的是一个 `Channel` 对象,可以通过该对象向远程服务器发送命令,并获取命令的输出。
2. `invoke_shell` 方法打开的是一个交互式的 shell,需要手动输入命令并等待命令执行完成后才能获取输出。
3. 由于 `invoke_shell` 方法打开的是一个交互式的 shell,因此需要使用特殊的方式来处理命令的输出,例如使用 `recv` 方法读取输出缓冲区中的数据。
下面是一个使用 `paramiko` 库和 `invoke_shell` 方法连接远程服务器并执行命令的示例代码:
```python
import paramiko
# 创建 SSH 客户端
client = paramiko.SSHClient()
# 允许连接不在 know_hosts 文件中的主机
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接远程服务器
client.connect('hostname', username='username', password='password')
# 打开交互式 shell
channel = client.invoke_shell()
# 发送命令
channel.send('ls\n')
# 等待命令执行完成
while not channel.recv_ready():
pass
# 获取命令输出
output = channel.recv(1024).decode()
# 输出命令输出
print(output)
# 关闭连接
client.close()
```
阅读全文