使用迭代输入调用多个Python子进程

时间:2016-12-19 18:45:48

标签: python python-2.7 subprocess popen python-multithreading

我正在编写一个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 时,它不会崩溃并实际等待输入。有什么想法吗?非常感谢帮助。提前谢谢!

0 个答案:

没有答案