我如何在两个python脚本之间进行通信?

Rav*_*avi 2 python

我有一个3d party python脚本,它从命令行获取输入.此脚本(input.py)中的相关代码如下所示:

import sys

def chooseinput():
    valid_inputs = ('a', 'b')
    inp = raw_input('Enter choice (%s): ' % "/".join(valid_inputs))
    if inp not in valid_inputs:
        sys.stderr.write("Unsupported input %s\n" % inp)
        return
    print 'You chose ' + '\'' + inp + '\''
    return inp

if __name__ == "__main__":
    chooseinput()
    # do something with the input...
    chooseinput()
    # do something with the input...
Run Code Online (Sandbox Code Playgroud)

我正在尝试编写另一个python脚本(harness.py)来生成上述脚本的输入.

import subprocess

def harness():
    p = subprocess.Popen(['python', 'input.py'], stdin=subprocess.PIPE)
    p.stdin.write('a')
    p.stdin.write('b')

if __name__ == '__main__':
    harness()
Run Code Online (Sandbox Code Playgroud)

从命令行,我运行:

$ python harness.py
Enter choice (a/b): Enter choice (a/b): Traceback (most recent call last):
  File "input.py", line 13, in <module>
    chooseinput()
  File "input.py", line 5, in chooseinput
    inp = raw_input('Enter choice (%s): ' % "/".join(valid_inputs))
EOFError: EOF when reading a line
Run Code Online (Sandbox Code Playgroud)

如果我在第一个脚本中只有一个输入,那么我可以通过删除第二个写调用来使第二个脚本工作.如果第一个脚本需要多个输入,那么我得到上述错误.

lin*_*uts 6

尝试:

p.stdin.write('a\n')
p.stdin.write('b\n')
Run Code Online (Sandbox Code Playgroud)