Popen.stdin.write 不适用于 Python3

Popen.stdin.write 不适用于 Python3


我正在启动到远程设备的 telnet 连接并开始发送命令。下面是一个简单的示例,它与远程设备建立 telnet 连接并开始发送设备特定命令 [ie "vr" , "KP on"]


import subprocess


telnet_client = subprocess.Popen(

    ["telnet", "192.168.1.120", "4002"],

    stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE,

    universal_newlines=True)


#Get Version

telnet_client.stdin.write('vr\n')

telnet_client.stdin.flush()


#Power on the device

telnet_client.stdin.write('kp on\n')

telnet_client.stdin.flush()


#Factory default

telnet_client.stdin.write('fd\n')

telnet_client.stdin.flush

Everystdin.write()没有抛出任何异常或错误,只是返回写入的字节数。但实际上消息没有发送。


Ubuntu机器1:

我在机器上安装 Python3 后观察到,上述实现停止使用 Python2.7


Ubuntu机器2:

在安装 Python3 后的另一台 Ubuntu 机器上,上述实现适用于 Python2.7,但不适用于 Python3。


如此常见的事情,在任何方向Popen.stdin.write上都不适用于 Python3。我相信有些软件包正在破坏系统。


请让我知道这件事


不负相思意
浏览 414回答 2
2回答

慕桂英546537

我面临着同样的问题。process.stdin.write()适用于 Python 2.7,但不适用于 Python 3。虽然我无法调试问题所在,但我能够使用process.communicate(). 文档。这是与进程通信的推荐方式。此外,我们作为输入传递给此方法的字符串需要以'\n'.

拉风的咖菲猫

这一切都准备好了。实际上服务器在调用 stdin.flush 后正在接收数据telnet_client.stdin.write('vr\n')telnet_client.stdin.flush()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python