我有一個接受命令行參數的模塊,我們稱之爲模塊A
。在沒有命令行的情況下傳遞參數
我想從另一個模塊執行A
- B
,以便B
將設置A
的arguments-
而不執行A
作爲一個單獨的過程。
任何方式來做到這一點?
我有一個接受命令行參數的模塊,我們稱之爲模塊A
。在沒有命令行的情況下傳遞參數
我想從另一個模塊執行A
- B
,以便B
將設置A
的arguments-
而不執行A
作爲一個單獨的過程。
任何方式來做到這一點?
這取決於模塊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__':
套件,然後你沉沒,必須重現該代碼。
哈我在這一個上打敗你:P –
@JoranBeasley:好吧,讓我們看看是否是最快的計數。 :-P –
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
我想將工作...不是真的建議,但....
只要定義腳本中的一個主要方法,以便它可以從兩個命令行和作爲一個模塊運行:
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')
如果A不合作(例如,通過使用「main(argv)」函數),那麼這種方式並不美觀。我認爲你不能改變它來做到這一點? – delnan