首页 > 解决方案 > Python 的 Subprocess 输入管道在特定机器上不断中断

问题描述

我编写了一个脚本,它使用 subprocess 模块通过 sshpadd 访问远程服务并收集一些信息,这些信息在我的本地机器和几个虚拟机上运行良好,但在我将部署它的机器上,作为输入PIPE 不断破裂(写入失败:Broken Pipe)

起初我认为错误与 sshpass 和 ssh 连接有关,我尝试更改我的 ssh_config 以包含 KeepAlive 部分以确保连接永远不会关闭(无论如何都不应该是这种情况,因为我的脚本不需要那么长时间要运行,只需访问远程房屋,运行几个命令并记录输出)。

我认为问题出在子进程模块和输入管道上,当将 subprocess.Popen 与另一个模块一起使用时,它在我使用通信功能时有效,但在我使用输入管道并尝试用户的同一部分我得到了同样write()flush()“断管”错误。

我不确定下一步该怎么做,特别是因为这个错误只发生在我(具有讽刺意味地)最终必须部署脚本的虚拟机上。我尝试过的所有其他虚拟机和我的本地机器都可以毫无问题地运行脚本。

sshpass = ['sshpass', '-p', 'password', 'ssh', '-tt', '-o' , 'StrictHostKeyChecking=no', '-o', 'ConnectTimeout=5', '-o', 'UserKnownHostsFile=/dev/null', 'root@host']

ssh_process = subprocess.Popen(sshpass, stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.PIPE)

ssh_process.stdin.write(b'\n\)
ssh.stdin.flush() 

知道这里可能有什么问题吗?我完全排除了 ssh 配置,因为我从代码正在运行并且运行良好的机器复制了相同的配置,还有什么可能导致这种情况?

标签: pythonsubprocess

解决方案


推荐阅读