2015-05-27 2 views
0

У меня есть несколько .py программ, которые я запускаю в своей IDE отдельно (я думаю, они просто запускаются как отдельные процессы, справа). Каждый из них имеет пару классов, некоторые глобальные переменные и т. Д. И основную функцию. Как я могу добиться того же эффекта программно, то есть запускать эти скрипты в определенном порядке?Запуск нескольких скриптов Python с одной функцией

Я пробовал несколько методов, но они, похоже, не оказывали такого эффекта, как запуск этих скриптов «вручную».

+0

Проверьте модуль подпроцесса. –

+0

Что вы делали? –

+0

Я пробовал Popen из 'subprocess', но я не могу понять, как его использовать. Это может быть проблемой. О, и я нахожусь в Windows. – user216094

ответ

0

Вы пытались написать дополнительный скрипт, который импортирует то, что необходимо из этих отдельных программ, и запускает их таким образом, который вы обозначили?

0

Вы могли бы сделать третий сценарий, который содержит имена всех других сценариев, которые вы хотите запустить, а затем дать subprocess вызов команды с к python Узнайте больше о подпроцессе here

0

Вообще говоря, импортировать сценарий будет запускать скрипт. Если у меня есть какой-то скрипт 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()).

+0

Даже если 'spam.py' не имеет метода 'main', он будет создан автоматически, вызвав' import spam spam.main() 'из' run.py'? Если бы я назвал 'foo' вместо' main' там, он не был бы создан, не так ли? Во всяком случае, проблема в том, что я не могу запустить их так, как вы описали, потому что почти каждый скрипт содержит бесконечный цикл (поэтому я запускаю их вручную, отдельно). Он не будет запускать второй скрипт, прежде чем он завершит выполнение первого, и этого никогда не будет (бесконечный цикл). – user216094

+0

Нет - возможно, мое объяснение было недостаточно ясным. Ничего не будет создано автоматически. Если в spam.py есть 'def main():' и spam', вы можете запустить его как 'spam.main()'. –

Смежные вопросы