Как повторно запустить скрипт Python из другого скрипта Python? - PullRequest
0 голосов
/ 21 февраля 2019

Я хочу повторно запускать 2 сценария Python каждые 10 секунд из другого сценария.

У меня есть файл 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()

Результат, который я получаю какследует Output

На самом деле я хочу, чтобы он печатался как

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

и т. д. каждые 10 секунд.

Я пытался использовать os.система ('test1.py'), но она открывает файл в pycharm.Я использую ноутбук Jupyter.также пробовал вызов подпроцесса.

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019
  • Либо используйте 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 будет выполняться как отдельный код (т. Е. Выне может передать ему переменные) и будет читаться и анализироваться каждый раз (в случае subprocess, новый процесс Python также будет порождаться каждый раз).Во втором случае он будет прочитан один раз и как модуль (т.е. вы можете передавать аргументы в test1.main()).

0 голосов
/ 21 февраля 2019

Самый простой способ - определить функции в этих файлах .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()
...