如何获得程序正在读取其输入的频道

时间:2018-07-13 09:30:06

标签: subprocess stdin

我有2个正在使用的流程。第一个过程是实现TCL控制台的外部程序,第二个过程是我正在编写的Python脚本。

我正在使用Python的子进程来调用其他程序,然后将程序的stdin / stdout / stderr连接到PIPE。

读取写入stdout的程序输出(然后通过PIPE重定向到我的python脚本)可以很好地工作。但是我无法向程序的stdin写任何东西。

为确保问题不在于我使用子流程的方式,我将包含以下代码片段:

import subprocess

my_prog = subprocess.Popen(['program', '-tcl', 'a.tcl'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

my_prog.stdin.write("HELLO\n")
my_prog.stdin.flush()

while True:
   line = my_prog.stdout.readline()
   if line == '':
      break
   print(line)

程序正在执行简单的TCL脚本a.tcl

puts [gets stdin]

但是它会无限期阻塞(等待获取)。我通过使用tclsh(而不是程序)运行TCL脚本测试了相同的配置,并且有效。

即使我独立运行程序,它也会在获取标准输入时阻塞。我不明白的是,程序怎么可能读取我的命令却无法从stdin读取?我不是使用通常在stdin上编写的键盘编写的命令吗?

在更一般的情况下,如何调试类似的问题?有命令知道特定进程使用的通道吗?

0 个答案:

没有答案