2010-12-16 5 views
1

знает кто-то, если у меня есть сценарий one.py который записывается следующим образом:Python - запустить внешний скрипт

if __name__ == '__main__': 
    # Do something 

И я хочу, чтобы назвать это main функции из другого сценария. Как мне это сделать?

Я предполагаю, что это будет что-то вроде (скажем, это launcher.py)

# 'one' stands for import from `one.py` module 
import one 

if __name__ == '__main__': 
    one.main() 

Единственная проблема заключается в том, что я не могу назвать main() этот путь.

Как это сделать?

ответ

1
with file('a.py','rU') as f: 
    co=compile(f.read(),'foobar','exec') 
    exec co in {'__name__':'__main__'} 
+4

Это работает, но это не так. Дело в том, что `__name__ == '__main __'` sentinel проверяет, выполняется ли ваша программа автономно. Конечно, вы можете притвориться, что это так, но вы не должны - вместо этого вы должны вызвать API, который он раскрывает! То есть вы вызываете `a.main()` из `b`. – katrielalex 2010-12-16 18:04:13

8

Определите свой сценарий как:

def main(): 
    # Do something 

if __name__ == '__main__': 
    # Processing of possible input parameters here and passing to main 
    main() 

Затем вы можете сделать

# 'one' stands for import from `one.py` module 
import one 

if __name__ == '__main__': 
    one.main() 

Конечно, вы можете назвать функцию, однако вы хотите.

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