Вот что я пытаюсь сделать:
-python process captures stderr of multiple subprocesses to watch the subprocesses
-each subprocess runs on the separate window displaying stdout.
Когда я использую Popen ( команда , stderr = fp4tempfile ) ,
(good) the python process can capture stderr of the subprocesses
(bad ) the subprocess shells stop displaying stdout.
Когда я использую Popen ( команда ) ,
(good) each subprocess shells displays stdout (as well as stderr, which does not matter for me),
(bad ) the python process cannot capture stderr.
Я хочу оба "хороших". Что я могу сделать для этого? Заранее спасибо.
(в настоящее время я использую python3.2 для разработки в Windows7)
Вот исходный код родительского процесса, написанный на python:
import os,subprocess
import time
fpws = []
fprs = []
def run_command(command):
<specifying a file to write -- skipped>
fpw = open(ftempname,'w')
fpr = open(ftempname,'r')
#cmd_redirect = "%s 2>%s" % (command,ftempname)#didnt do anything
#starting a sub-program:
pp = subprocess.Popen(command,stderr = fpw) #++
#pp = subprocess.Popen(command) #@@
fpws.append(fpw)
fprs.append(fpr)
def watch_program():
while True: #running forever for simplfication
for fpr in fprs:
outchunk = fpr.read()
<do something for subprocesses stderr -- skipped>
time.sleep(1.0)
if __name__ == '__main__':
cmd1 = '(path to program1)'
cmd2 = '(path to program2)'
run_command(cmd1) #kicking cmd1
run_command(cmd2) #kicking cmd2
watch_program() #hearing stderr msg from the other process
Примечание: на стороне подпроцесса fflush (stdout) и fflush (stderr) вызываются по мере необходимости.