我有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上编写的键盘编写的命令吗?
在更一般的情况下,如何调试类似的问题?有命令知道特定进程使用的通道吗?