如何从另一个 python 脚本重复 运行 一个 python 脚本?

How to repeatedly run a python script from another python script?

我想每 10 秒从另一个脚本重复 运行 2 python 个脚本。

我有一个包含以下语句的 python 文件:-

test1.py

print("this is test1")

test2.py

print("this is test2")

主要代码

from apscheduler.schedulers.blocking import BlockingScheduler


def some_job():
    print('hello')
    import test1
    import test2

scheduler = BlockingScheduler()
job=scheduler.add_job(some_job, 'interval', seconds=10)
scheduler.start()

我得到的结果如下

我实际上希望它打印为

hello
this is test1
this is test2
hello
this is test1
this is test2
hello
this is test1
this is test2

以此类推,每 10 秒一次。

我尝试使用 os.system('test1.py') 但它会在 pycharm 中打开文件。我正在使用 jupyter 笔记本。 还尝试了子进程调用。

最简单的方法是在那些 .py 文件中定义函数。将 test.py1 更改为:

 def test1():
      print("this is test 1")

并将test2.py更改为:

def test2():
       print("this is test 2")

然后将您的主要代码更改为:

 from test1 import test1
 from test2 import test2

 def some_job():
     print('hello')
     test1()
     test2()
  • 要么使用runpy.run_path or subprocess.check_call将运行文件作为脚本:

    import runpy
    def some_job():
        <...>
        runpy.run_path('test1.py')
    

    import sys, subprocess
    def some_job():
        <...>
        subprocess.check_call((sys.executable, 'test1.py', <command line args if needed>))
    

  • 将要执行的文件的payload放入一个函数中,导入一次模块,重复调用函数:

    test1.py:

    def main():
        print("this is test1")
    

    主要代码:

    import test1
    
    def some_job():
        <...>
        test1.main()
    

主要区别在于,在第一种情况下,test1.py 将作为独立代码执行(即您不能将变量传递给它)并且每次都会被读取和解析(在 subprocess,每次也会产生一个新的 Python 进程)。在第二种情况下,它将被读取一次并作为一个模块(即您可以将参数传递给 test1.main())。