我想每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笔记本。 还尝试了子流程调用。
答案 0 :(得分:1)
最简单的方法是在这些.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()
答案 1 :(得分:1)
使用runpy.run_path
或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>))
或
将要执行的文件有效负载放入函数中,一次导入模块并重复调用该函数:
test1.py:
def main():
print("this is test1")
主要代码:
import test1
def some_job():
<...>
test1.main()
主要区别在于,在第一种情况下,test1.py
将作为独立代码执行(即,您不能将变量传递给它),并且每次都会被读取和解析(对于{{1}而言) },每次也会产生一个新的Python进程)。在第二种情况下,它将作为模块读取一次(即,您可以将参数传递给subprocess
)。