2015-11-04 42 views
0

我想寫,將在外殼帶有參數,如執行的Python代碼:運行不帶參數的Python代碼預期參數時

python programName.py arg1 arg2 

我寫的代碼,這樣,如果沒有參數通過它將默認爲在代碼中聲明的默認值。我嘗試用類似的東西這樣做:

# ... Imports such as sys 
x = argv[0] 
y = argv[1] 
# ... Other Code 

def main(): 
if x is None: 
    x = 0 
if y is None: 
    y = 12 
# ... Other Code 

但是Python的不喜歡我做的方式,而當沒有傳遞參數,將拋出一個錯誤。

對不起,我不能顯示錯誤,因爲程序在我的另一臺計算機上,不在我身邊。什麼是正確的方法來做到這一點?

+1

'X = sys.argv中[0]'.. –

+1

這並不完全符合您的要求,但我認爲argparse是對付在Python參數的最佳方式:HTTPS://docs.python .org/2/howto/argparse.html – davejagoda

回答

2

試試這個:

import sys 

# ... Imports such as sys 
x = sys.argv[1] if len(sys.argv) > 1 else None # None is the default value 
y = sys.argv[2] if len(sys.argv) > 2 else None # None is the default value 
# ... Other Code 

sys.argv[0] - >給出了程序文件名

在你運行python program_file_name x y上述問題,在這種情況下sys.argv[0]給你program_file_name

+0

沒有'IndexError'和'UnboundLocalError'? –

+0

在上面的問題中,他正在運行python program_file_name xy 在這種情況下,sys.argv [0]爲您提供了program_file_name –

+0

我的意思是,似乎OP想檢查是否不存在'arg2',然後將'y'設置爲'12' 。但是如果真的沒有'arg2',那麼'y = sys.argv [2]'會引發一個'IndexError'。 –

0

您應該檢查的argv長度:

if len(argv) < 2: 
    x = 0 
if len(argv) < 3: 
    y = 12 
0

如何執行以下操作。你需要檢查參數列表的長度來確定,否。的論點通過。

import sys 

x = None 
y = None 

if len(sys.argv) > 3: 
    print("Usage: ....") 
    sys.exit(1) 

if len(sys.argv) > 1: 
    x = sys.argv[1] 

if len(sys.argv) > 2: 
    y = sys.argv[2] 
+0

我覺得你給自己更多的麻煩比它的價值這樣做,爲什麼不繫統地檢查和建立你的x和y值,例如,你有 如果len (sys.argv)== 2:x = sys.argv [1] if len(sys.argv)== 3:y = sys.argv [2] .... etc –

+1

@GlenKeane更新的代碼根據你的建議。 –