2012-12-23 198 views
0

我有一個接受命令行參數的模塊,我們稱之爲模塊A在沒有命令行的情況下傳遞參數

我想從另一個模塊執行A - B,以便B將設置A的arguments-

而不執行A作爲一個單獨的過程。

任何方式來做到這一點?

+0

如果A不合作(例如,通過使用「main(argv)」函數),那麼這種方式並不美觀。我認爲你不能改變它來做到這一點? – delnan

回答

3

這取決於模塊A如何接受它的參數。如果着眼於sys.argv,沒有__main__測試,那麼你可以改變sys.argv

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

然後導入模塊A

但是,如果你自己寫A,使用函數,稱爲從__main__測試來代替:

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

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

,那麼你可以導入A並直接調用main()

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

注意如果模塊A不是你自己的,而且它確實__main__測試,但是做了所有的工作if __name__ == '__main__':套件,然後你沉沒,必須重現該代碼。

+0

哈我在這一個上打敗你:P –

+0

@JoranBeasley:好吧,讓我們看看是否是最快的計數。 :-P –

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')