Вопрос-Ответ

How to call a script from another script?

Как вызвать скрипт из другого скрипта?

У меня есть скрипт с именем test1.py, которого нет в модуле. В нем просто есть код, который должен выполняться при запуске самого скрипта. В нем нет функций, классов, методов и т.д. У меня есть другой скрипт, который выполняется как сервис. Я хочу вызвать test1.py из скрипта, работающего как сервис.

Например:

Файл test1.py:

print "I am a test"
print "see! I do nothing productive."

Файл service.py:

# Lots of stuff here
test1.py # do whatever is in test1.py
Переведено автоматически
Ответ 1

Обычный способ сделать это примерно следующий.

test1.py

def some_func():
print 'in test 1, unproductive'

if __name__ == '__main__':
# test1.py executed as script
# do something
some_func()

service.py

import test1

def service_func():
print 'service func'

if __name__ == '__main__':
# service.py executed as script
# do something
service_func()
test1.some_func()
Ответ 2

Это возможно в Python 2 с помощью execfile:

execfile("test2.py")

В Python 3 это возможно с помощью exec:

exec(open("test2.py").read())

Ознакомьтесь с документацией по обработке пространств имен, если это важно в вашем случае.

Однако вам следует рассмотреть возможность использования другого подхода; ваша идея (из того, что я вижу) выглядит не очень чистой.

Ответ 3

Другой способ:

Файл test1.py:

print "test1.py"

Файл service.py:

import subprocess

subprocess.call("test1.py", shell=True)

Преимущество этого метода в том, что вам не нужно редактировать существующий скрипт на Python, чтобы поместить весь его код в подпрограмму.

Документация: Python 2, Python 3

Ответ 4
import os

os.system("python myOtherScript.py arg1 arg2 arg3")

Используя os, вы можете выполнять вызовы непосредственно на свой терминал. Если вы хотите быть еще более конкретным, вы можете объединить входную строку с локальными переменными, т.Е..

command = 'python myOtherScript.py ' + sys.argv[1] + ' ' + sys.argv[2]
os.system(command)
python