Вообще говоря, импортировать сценарий будет запускать скрипт. Если у меня есть какой-то скрипт spam.py
который читает:
print 'eggs'
Тогда я могу написать еще один сценарий run.py
в той же директории со следующими:
import spam
Когда я бегу python run.py
, он выводит «яйца ».
Большинство скриптов, которые используются как модули библиотеки, которые вы импортируете, содержат только определения функций и классов. Эти модули все еще запускаются при их импорте, но они фактически не делают ничего, кроме как сделать определения.
Так что, если я изменить spam.py
следующим образом:
def main():
print 'eggs'
Тогда, когда я запустить python run.py
ничего на самом деле произошло. Но я могу изменить run.py
следующим образом:
import spam
spam.main()
Теперь определим main
в пространстве имен spam
, а также по телефону main()
напечатать «яйца».
И, наконец, иногда сценарии предназначены для использования как модули для импорта и сценарии для запуска самостоятельно. Для этого часто бывает, что при импорте вы не хотите, чтобы скрипт ничего не делал, кроме определения модулей и классов. Вы можете сделать spam.py
работы таким образом, следующим образом:
def main():
print 'eggs'
if __name__ == '__main__':
main()
Теперь, если вы запустите python spam.py
он будет печатать «яйцо» на экран. Но если вы import spam
это не будет. Набор операторов внутри if __name__ == '__main__':
запускается только при непосредственном вызове сценария.
Однако, вы можете получить такое же поведение с spam
как делать python spam.py
путем импорта spam
и вызова main
:
import spam
spam.main()
Опять же, это выводит яйца на экран.
Так что если у вас есть несколько сценариев foo.py
, bar.py
, baz.py
, что вы хотите запустить в последовательности из другого сценария, вы просто импортировать все скрипты, а затем, если все команды защищены if __name__ == '__main__':
, вы запускаете их в вашем вызывающий сценарий, заставляя заранее добавить соответствующее пространство имен каждой команде (т. е. если main()
вызывается в foo.py
, то вы вызываете foo.main()
).
Проверьте модуль подпроцесса. –
Что вы делали? –
Я пробовал Popen из 'subprocess', но я не могу понять, как его использовать. Это может быть проблемой. О, и я нахожусь в Windows. – user216094