【发布时间】:2019-09-14 06:51:29
【问题描述】:
我正在使用 Popen 通过 ssh 启动 telnet 进程,通过 telnet 发送命令并检查进程的输出以监视 telnet 的状态。我遇到的奇怪的事情是代码在 Python 3.2.3 上运行良好,但是当我在 Python 3.6.5 中运行它而不更改代码时,它无法获得输出。
我试过了
刷新标准输出
在 stdout.write 之后最多等待 10 秒
检查标准错误
def nonblockingread(sout):
fd = output.fileno()
fl = fcntl.fcntl(fd, fcntl.F_GETFL)
try:
return sout.read()
except:
return ""
process = Popen(shlex.split("ssh anon@server \"telnet 0 2323\""), stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
print(nonblockingread(process.stdout)) # works for both versions
process.stdin.write(b"start service 4\n")
print(nonblockingread(process.stdout)) # works in 3.2 but not 3.6 (prints empty line)
print(process.stdout.readline()) # also prints empty line in 3.6
【问题讨论】:
-
为什么要写入可读的 process.stdout 而不是可写的 process.stdin?
-
打错字了
-
似乎缺少一些代码——例如,您从未设置任何非阻塞的东西。你的“服务 4”真的启动了吗?
标签: python python-3.6 python-3.2