Popen.stdin.write不适用于Python3
我正在启动与远程设备的telnet连接,并开始发送命令。下面是一个简单的示例,该示例通过telnet连接到远程设备并开始发送设备特定命令[即“ 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
每个stdin.write()
都不会引发任何异常或错误,只是返回写入的字节数。但实际上消息未发送。
我在机器上安装Python3后观察到,以上实现停止在Python2.7上运行
在安装Python3之后的另一台Ubuntu计算机中,以上实现适用于Python2.7,但不适用于Python3。
很常见,在任何方向Popen.stdin.write
都不适用于Python3。我相信某些软件包正在使系统陷入困境。
请让我知道这一点
我面临着同样的问题。 process.stdin.write()
在Python 2.7中有效,但在Python 3中不起作用。尽管我无法调试问题所在,但我可以使用process.communicate()
实现该功能。 Documentation。这是与流程进行通信的推荐方式。另外,我们传递给此方法的输入字符串必须以'\n'
结尾。