2012-07-29 68 views
0

我是一個python新手。爲了以可理解的方式提出我的問題,我創建了兩個腳本。一個腳本被命名爲:called_script.py其他腳本被命名爲:calling_script.py如何防止導入模塊「導入」sys.argv [1:]

下面兩行是在called_script.py代碼

import sys 
print str(sys.argv[1]) + '\n\n' + str(dir(sys.argv[1])) 

下面兩行是在calling_script.py代碼

import sys 
import called_script 

如果我喂 '富' 作爲命令行參數 'calling_script.py',foo將顯示爲sys.argv中[1]在 'called_script.py'

是否有任何共同de,我可以添加到'called_script.py',這樣'called_script.py'可以確定 sys.argv [1]是否從命令行傳遞給它,或者sys.argv [1]是否從它傳遞給它'main'?

此外,我很想知道是否有可能阻止例如sys.argv [1]從傳遞到導入的模塊,並且我可以在這裏找到關於此主題的一些閱讀。

謝謝你的幫助。非常感謝。

     Marc 

回答

1

有沒有辦法,我可以添加到「called_script.py」讓 「called_script.py」能確定sys.argv中是否從命令行傳遞給 它[1]的任何代碼,或者sys.argv [1]是否從 'main'傳遞給它?

從根本上說,沒有,因爲命令行參數不傳遞給模塊,他們傳遞給Python的,這使他們在sys.argv。由於所有的模塊共享相同的sys,他們都會看到相同的sys.argv,就是這樣。

這就是說,你可以採取的__name__,它被設置爲__main__只對主腳本的優勢:

~/coding$ python calling_script.py fred 
called_script says __name__ is: called_script 
calling_script says __name__ is: __main__ 

所以,你可以使用類似

args = sys.argv if __name__ == '__main__' else [whatever_you_want] 

,然後用args來獲得相當於模塊特定的sys.argv。同樣,您可以在calling_script.py開始的__name__分支,然後修改sys(ick)中的一個。

但是一般來說,無論如何,您不應該在主程序之外的任何地方使用sys.argv。如果您需要在多個位置訪問sys.argv,則您的界面可能與您的例程不夠分離。