使用fork& execvp输出重定向

时间:2016-02-25 11:16:40

标签: python linux python-2.7 posix

我有一个程序将输出打印到stdout:

#!/usr/bin/env python

import time
import sys

if len(sys.argv) < 1:
    valualuee = 1
else:
    value = sys.argv[1]

counter = 0
while counter < 100:
    print value
    time.sleep(0.1)
    counter = counter+1

然后我想要在程序中使用不同的参数执行它的2个实例。 在该程序中,我想指定程序的stdout被重定向到哪个文件中。

两个程序完成后,我想在主控台中再次打印一些东西,但是失败了。

除了文件中的输出之外,我还希望能够在控制台上看到一个程序的输出。

这是我的尝试:

#!/usr/bin/env python

import subprocess
import sys
import os
import time

###########################################
def background(program, argument, logfile):
    #redirect stdout
    sys.stdout = open(logfile, "w")
    os.dup2(sys.stdout.fileno(), 1)

    try:
        pid=os.fork()
    except OSError, e:
        sys.exit(1)

    if pid==0:  #in the forked process
        ex = "./" + program
        os.execvp(ex, [ex, argument])

    return pid
###########################################


pid1 = background("program1.py", "1", "log1")
pid2 = background("program1.py", "2", "log2")

os.waitpid(pid1, 0)
os.waitpid(pid2, 0)

#print in console again
print "done"

0 个答案:

没有答案