Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当两个子进程从stdin读取时,我的程序不响应_Python_Subprocess_Stdin - Fatal编程技术网

Python 当两个子进程从stdin读取时,我的程序不响应

Python 当两个子进程从stdin读取时,我的程序不响应,python,subprocess,stdin,Python,Subprocess,Stdin,我有一个C程序,在运行时需要一些控制信息。这些信息将由我的python程序传递。我首先测试这个,它工作得很好 from subprocess import PIPE import subprocess cpro = ['./a_pass','2','8','7'] #2,8,7 are some parameters for init p1 = subprocess.Popen(cpro,stdout=PIPE, stdin=PIPE) #p2 = subprocess.Pope

我有一个C程序,在运行时需要一些控制信息。这些信息将由我的python程序传递。我首先测试这个,它工作得很好

from subprocess import PIPE
import subprocess

cpro = ['./a_pass','2','8','7']        #2,8,7 are some parameters for init
p1 = subprocess.Popen(cpro,stdout=PIPE, stdin=PIPE)
#p2 = subprocess.Popen(cpro,stdout=PIPE, stdin=PIPE)

f1 = open('bdt.100','r')               #control information
commands = f1.read()

out1 = p1.communicate(commands)[0]     #get the c program output
#out2 = p2.communicate(commands)[0]

print out1
print '--------------'
#print out2
问题是当我打开评论时。我试图测试stdin中的这些信息是否可以通过两个进程读取。但是,我的python程序在执行时没有响应。它就挂在那里。我猜原因是两个子进程为读取stdin而斗争。我如何控制他们和谐地工作

Bst问候您

更新

我将我的代码更改为此,它可以工作:

p1 = subprocess.Popen(passOne,stdout=PIPE, stdin=PIPE)
out1 = p1.communicate(commands)[0]

p2 = subprocess.Popen(failOne,stdout=PIPE, stdin=PIPE)
out2 = p2.communicate(commands)[0]

我想说些什么,但我能感觉到发生了什么。因此,我只是在代码中说明了如何在不进行更多分析的情况下解决问题。请原谅。

我不认为这是你的问题——因此你的程序是一个接一个地运行的,而不是同时运行的。我猜第二个进程并不是因为某种原因而终止的。还值得注意的是,您应该使用它来打开文件-它更可读,并且可以确保正确地关闭文件(即使在异常情况下)。@Lattyware但我使用相同的init参数和控制信息运行相同的C程序。为什么它们会导致不同的结果?我想知道,在子进程1读取stdin之后,当子进程2开始读取stdin时,stdin是什么样子的?这在很大程度上取决于您正在运行的进程是做什么的。您是否尝试过使用另一个您知道会起作用的流程(例如
ls
)并查看是否存在任何问题?下次您还可以收集子流程的标准错误并打印此错误。可以提供有用的见解:)