2012-12-23 5 views
0

명령 줄에서 인수를 받아들이는 모듈을 가지고 있는데 그 모듈을 A이라고 부릅니다. 별도의 프로세스로 A을 실행하지 않고 A명령 줄없이 인수 전달

의 인자를 설정한다 B 있도록 B -

I는 다른 모듈로부터 A을 실행하고 싶다.

그 방법은 무엇입니까? 나는 그러나 정말하지 않는 것이 좋습니다 ... 작동합니다 생각

+0

A가 협동하지 않으면 (예 :'main (argv)'기능을 가짐) 꽤 좋은 방법이 아닙니다. 너는 그렇게하기 위해 그것을 바꿀 수 없다고 생각 하나? – delnan

답변

3

이는 모듈 A이 인수를 취하는 방식에 따라 다릅니다. 그것은 단지이 sys.argv 살펴보고 더 __main__ 시험이없는 경우에, 당신은 sys.argv을 변경할 수 :

sys.argv[1:] = ['arg1', 'arg2'] 

는 모듈 A을 가져옵니다.

def main(*args): 
    # main code for module 

if __name__ == '__main__`: 
    import sys 
    main(*sys.argv[1:]) 

은 다음 A를 가져올 수 있습니다 직접 main() 전화 : 당신이 A 직접 작성하는 경우

그러나, 대신 __main__ 테스트에서라는 함수를 사용

import A 
A.main('arg1', 'arg2') 

참고 모듈 A이 자신의 것이 아니며 에 이라는 테스트가 있지만 그 중 모든 작업을 수행하는 경우 if __name__ == '__main__': 제품군을 사용하면 침몰되어 코드를 재생성해야합니다.

+0

하하. 나는 이걸로 이겼다. P –

+0

@JoranBeasley : 글쎄, 그게 가장 빠른 카운트인지 보자. :-피 –

0
import sys 
sys.argv[1:] = ["My Arguments","other Args"] #dont replace [0] ...since it can let you know which script was actually executed ... 

import A 
A.run() #or whatever 

....

2

는 모두 명령 줄에서와 모듈로 실행할 수 있도록 그냥 스크립트의 메인 메소드를 정의 :

def main(arg1, arg2): 
    # All your code goes here 

if __name__ == '__main__': 
    main(*sys.argv[1:]) 

그런 다음 중 하나를 수행 할 수 있습니다

$ a.py x y 

또는

>>> import a 
>>> a.main('x', 'y')