Popen.stdin.write不适用于Python3

问题描述 投票:0回答:1

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()都不会引发任何异常或错误,只是返回写入的字节数。但实际上消息未发送。

Ubuntu机器1:

我在机器上安装Python3后观察到,以上实现停止在Python2.7上运行

Ubuntu machine2:

在安装Python3之后的另一台Ubuntu计算机中,以上实现适用于Python2.7,但不适用于Python3。

很常见,在任何方向Popen.stdin.write都不适用于Python3。我相信某些软件包正在使系统陷入困境。

请让我知道这一点

python python-3.x subprocess
1个回答
0
投票

我面临着同样的问题。 process.stdin.write()在Python 2.7中有效,但在Python 3中不起作用。尽管我无法调试问题所在,但我可以使用process.communicate()实现该功能。 Documentation。这是与流程进行通信的推荐方式。另外,我们传递给此方法的输入字符串必须以'\n'结尾。

© www.soinside.com 2019 - 2024. All rights reserved.