调用函数x次并从另一个脚本执行它

时间:2016-01-24 05:23:04

标签: python function python-2.7 execute

我正在运行2个python脚本,比如main.pytest.py 在main.py中,我每30秒执行一次get_details函数“x”次。

注意:我想按顺序执行funA,funcB funC。我在这里遇到的问题是 - 当我运行test.py时,它首先运行funcC(),即使我先调用funcA()。

test.py

def funcA():
    #do something
    funcB()

def funcB():
    #do something
    funcC()

def funcC():
    #here i want to execute script main.py
    #My attempt 1 :  
    import subprocess
    import sys
    theproc = subprocess.Popen([sys.executable, "main.py"])
    theproc.communicate() 

    #------OR-----------

    #My attempt 2: 
    execfile("main.py")

main.py

import threading
def get_details(a,b,c):
    #do something ...        


class RepeatEvery(threading.Thread):
    def __init__(self, interval, func, *args, **kwargs):
        threading.Thread.__init__(self)
        self.interval = interval  # seconds between calls
        self.func = func          # function to call
        self.args = args          # optional positional argument(s) for call
        self.kwargs = kwargs      # optional keyword argument(s) for call
        self.runable = True
    def run(self):
        while self.runable:
            self.func(*self.args, **self.kwargs)
            time.sleep(self.interval)
    def stop(self):
        self.runable = False

thread = RepeatEvery(30, get_details,"arg1","arg2","arg3")
print "starting"
thread.start()
thread.join(21)  # allow thread to execute a while...

我想在所有函数(funcA,funcB)正确执行后才执行脚本main.py.但在我的情况下,main.py先执行,然后控制返回test.py并执行funcA()和funcB()。

我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

好。我重写了你的代码,所以它会像你说的那样工作。

... main.py

extern const int global; //declaration

... test.py

#Good design for small classes: keep global functions separate for people who want
#to explore the type, but not everything that comes along with it.
#I moved the the global functions and code execution from top and bottom to test.py

import threading
import time #You forgot to import time.

class RepeatEvery(threading.Thread):
    def __init__(self, interval, func, *args, **kwargs):
        threading.Thread.__init__(self)
        self.interval = interval  # seconds between calls
        self.func = func          # function to call
        self.args = args          # optional positional argument(s) for call
        self.kwargs = kwargs      # optional keyword argument(s) for call
        self.runable = True
    def run(self):
        while self.runable:
            self.func(*self.args, **self.kwargs)
            time.sleep(self.interval)
    def stop(self):
        self.runable = False

    """ We couuuld have done this, but why bother? It is hard to work with.
    def get_details(self,a,b,c):
    #do something else as a function of the class...
    """