gpt4 book ai didi

python - Paramiko:读取时管道 block 永远

转载 作者:太空狗 更新时间:2023-10-29 18:25:54 28 4
gpt4 key购买 nike

我在让管道与 paramiko 一起工作时遇到问题。

这个有效:

ssh = paramiko.SSHClient()
[...]
stdin, stdout, stderr = ssh.exec_command("find /tmp")
stdout.read()

有效(在 stdout.read() 上永远阻塞):

[...]
stdin, stdout, stderr = ssh.exec_command("bash -")
stdin.write("find /tmp\n")
stdin.close()
stdout.read()

有什么想法吗?

编辑:

我查看了 paramiko 的源代码,ChannelFile.close 在通信方面并没有真正做任何事情。所以我查看了 channel API,这似乎有效:

stdin.write("find /tmp\n")
stdin.flush()
stdin.channel.shutdown_write()
stdout.read()

最佳答案

经过一些调查,似乎 stdin.close() 实际上并未结束 bash session 。为此,您可以使用 bash 命令 exit (stdin.write('exit\n')) 或深入到 paramiko Channel stdin 对象下的对象:

stdin.channel.shutdown_write()

如果您希望 bash session 继续执行另一个命令,您需要直接使用 channel 对象。 documentation for Channel提到了 recv_ready(self)recv(self, nbytes) 这将允许您在尝试获取数据之前检查数据。

关于python - Paramiko:读取时管道 block 永远,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8052840/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com