两个在运行时相互交互的程序

时间:2014-04-07 21:46:01

标签: python bash shell pipe io-redirection

codegolf.SE沙箱上的

This question是关于编写hangman解算器的。我想写一个主要的“游戏”程序,输出下划线,并采用单个字母作为输入;另一个程序,“求解器”,将下划线作为输入并输出字母。

我以前不知道如何做到这一点。我尝试了herehere所描述的方法,但仍然没有运气。

我在python中的示例游戏程序如下:

import sys
s="HANGMAN"
s2=[]
for i in s:
    s2.append('_')
err=0
print ''.join(s2)
sys.stderr.write('debug _______\n')
while err<6 and '_' in s2:
    c=raw_input()
    nomatch=True
    for i in range(0, len(s)):
        if s[i]==c:
            s2[i]=c
            nomatch=False
    if nomatch:
        err+=1
    print ''.join(s2)

我的样本求解程序如下:

import sys
raw_input()
sys.stderr.write('debug H\n')
print 'H'
raw_input()
print 'A'
raw_input()
print 'N'
raw_input()
print 'G'
raw_input()
print 'M'
raw_input()

然后在我的终端中我尝试了以下内容:

mkfifo fifo
python game.py <fifo | python solver.py >fifo

coproc python game.py
python solver.py <&${COPROC[0]} >&${COPROC[1]}

{ python game.py | python solver.py; } >/dev/fd/0

所有这些只提供来自game.py的第一个调试消息,然后看起来两个程序都在等待输入。我做错了什么以及如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我设法使用mkfifo fifo方法通过在每个sys.stdout.flush()语句后添加print来解决此问题。