我正在尝试使用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的新手,所以我先尝试代表我。如果对概念缺乏了解,请原谅
答案 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()