我正在编写一个x = x - 1
脚本,其中包含不同的Python脚本,这些脚本将一个脚本的输出作为另一个脚本的输入顺序输出。使用pipeline
模块从命令行调用脚本。应用程序必须在Windows上运行,因此我无法使用subprocess
模块。
我有一个Python脚本pexpect
,它是我的应用程序的主要入口点,pipeline.py
脚本首先被调用并期望从first.py
输入。
此处,second.py
将提示first.py
进行固定次数的迭代:
input
现在,# first.py
import sys
sum = 0
for i in range(0, 10):
num = int(input('value: ')) # wait for input from pipeline.py, given by second.py
# TODO: sleep to avoid EOFFile error?
# while not num:
# time.sleep(5) until value is given?
sum += num
sys.stdout.write(sum) # return with answer to pipeline.py
会提示输入first.py
生成的数字:
second.py
在# second.py
import random
import sys
rand_num = random.randint(1, 10)
sys.stdout.write(rand_num) # or print(rand_num)
我致电pipeline.py
,等到它要求输入值,致电first.py
生成该值,然后将其传回second.py
。
first.py
似乎我的问题出现了,因为prc1要求输入但不等待提供输入。但是,直接从命令行运行# pipeline.py
import subprocess as sp
cmd1 = "python first.py"
cmd2 = "python second.py"
prc1 = sp.Popen(cmd1, shell=True, stdin=sp.PIPE, stdout=sp.PIPE, stderr=sp.PIPE)
# TODO: put prc1 on hold until value is passed
# do this for each iteration in first.py (i.e. range(0,10))
while True:
line = prc1.stdout.readline(): # TODO: generates EOFError
if line == "value: ": # input prompt
prc2 = sp.Popen(cmd2, shell=True, stdin=sp.PIPE, stdout=sp.PIPE, stderr=sp.PIPE)
(val, err) = prc2.communicate()
prc1.stdin.write(val) # pass value back to first.py
if type(line) == int: # iterations finished, first.py returns sum
break
时,它不会崩溃并实际等待输入。有什么想法吗?非常感谢帮助。提前谢谢!