使用子进程同时执行两个进程的问题

时间:2015-03-02 19:03:23

标签: python subprocess

我正在尝试使用subprocess从python脚本中执行python脚本,但我遇到了一些问题。这就是我想要做的事情:

我想首先启动一个主进程(执行python脚本1),并且在执行此进程一段时间后,我想启动一个子进程(执行python脚本2)。现在,当这个子流程正在执行时,我希望主流程的执行也会继续,当主流程完成时,它应该等待子流程完成。

以下是我写的代码。这里Script1.py是我导入到我的代码中的主要流程脚本。 Script2.py是使用subprocess.Popen()调用的子流程脚本。

Script1.py

import time

def func():
    print "Start time : %s" % time.ctime()
    time.sleep( 2 )
    print "End time: %s" % time.ctime()
    return 'main process'

Script2.py

import time

def sub():
    count=0
    while count < 5:
        print "Start time : %s" % time.ctime()
        time.sleep(3)
        print "End time: %s" % time.ctime()
        x+=1
    return 'sub process'

if __name__ == '__main__':
   print 'calling function inside sub process'
   subval = sub()

Main_File.py是通过导入Script1.py然后稍后启动子流程来启动第一个流程的脚本

Main_file.py

import subprocess
import sys
import Script1

def func1():

    count=0

    while x < 5:
        code = Script1.func()

        if x == 2:
            print 'calling subprocess'
            sub_result = subprocess.Popen([sys.executable,"./Script2.py"]) # Start the execution of sub process. Main process should keep on executing simultaneously
        x+=1
    print 'Main process done'
    sub_result.wait() # even though main process is done it should wait for sub process to get over
    code = sub_result # Get the value of return statement from Sub process
    return code


if __name__ == '__main__':
    print 'starting main process'
    return_stat = func1()
    print return_stat

当我运行Main_file.py时,它执行的输出不正确。它似乎没有执行子进程,因为我没有看到Script2.py中写入的任何print语句,并且它在主进程完成后停止。另外我不确定从子进程获取return语句的值的方法。任何人都可以帮助我尝试获得正确的输出。

注意:我是python和subprocess的新手,所以我先尝试代表我。如果对概念缺乏了解,请原谅

1 个答案:

答案 0 :(得分:1)

子进程调用外部程序。您的Script2没有做任何事情,因为函数sub未被调用。也许你想使用线程:

import threading
import Script1
import Script2

def func():
    thread1 = threading.Thread(target=Script1.func)
    thread1.start()
    thread2 = threading.Thread(target=Script2.sub)
    thread2.start()
    thread2.wait()