hmn*_*hmn 10 python ssh paramiko
我有一个问题,让管道与paramiko一起工作.
这有效:
ssh = paramiko.SSHClient()
[...]
stdin, stdout, stderr = ssh.exec_command("find /tmp")
stdout.read()
Run Code Online (Sandbox Code Playgroud)
这并没有工作(上stdout.read块永()):
[...]
stdin, stdout, stderr = ssh.exec_command("bash -")
stdin.write("find /tmp\n")
stdin.close()
stdout.read()
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
编辑:
我查看了paramiko的源代码,而ChannelFile.close在通信方面并没有真正做任何事情.所以我查看了通道API,这似乎有效:
stdin.write("find /tmp\n")
stdin.flush()
stdin.channel.shutdown_write()
stdout.read()
Run Code Online (Sandbox Code Playgroud)
101*_*100 14
通过一些调查,似乎stdin.close()实际上并没有结束bash会话.要做到这一点,你可以使用bash命令exit(stdin.write('exit\n'))或挖掘Channel对象下面的paramiko stdin对象:
stdin.channel.shutdown_write()
Run Code Online (Sandbox Code Playgroud)
如果您希望bash会话继续执行另一个命令,则需要直接使用通道对象.在对文档Channel提到recv_ready(self)和recv(self, nbytes)这将使你牛逼检查数据,你设法得到它之前.
| 归档时间: |
|
| 查看次数: |
4258 次 |
| 最近记录: |