2016-07-14 55 views
0

我剛開始學習Python 3,而我的argparse方法不能正常工作。我已經嘗試過來自這個網站的不同例子,但沒有任何工作像我想要的那樣。Python 3:我的argparse方法不能正常工作

我的代碼如下所示:

import argparse 

class CommandlineArguments(): 
    def __init__(self, number, duplicates, databases): 
     self.number = args.number 
     self.duplicates = args.duplicates 
     self.databases = args.databases 

    def ArgumentPassing(self): 
     print('reached the variables') 
     print(self.number * 2) 
     print(self.duplicates) 
     print(self.databases) 

if __name__ == '__main__': 
    parser = argparse.ArgumentParser(prog='TEST_LIST') 
    parser.add_argument('-number') 
    parser.add_argument('-duplicates') 
    parser.add_argument('-databases') 
    args = parser.parse_args() 

    commands = CommandlineArguments(args.number, args.duplicates, args.databases) 

當我試圖與運行該程序:

python3 argparse_try.py 

我期待,我會得到一個消息,如「參數太少...... 「相反,它只是運行沒有任何錯誤。

有誰知道我在做什麼錯?

回答

0

如果您需要參數,您必須通過required=True

這是需要所有參數的工作代碼。 (我也改變了你的單短線雙破折號,這是比較典型的,我設置type=int--number,因爲我認爲這是你想要的東西。)

import argparse 

if __name__ == '__main__': 
    parser = argparse.ArgumentParser(prog='TEST_LIST') 
    parser.add_argument('--number', required=True, type=int) 
    parser.add_argument('--duplicates', required=True) 
    parser.add_argument('--databases', required=True) 
    args = parser.parse_args() 

# Output if you don't pass any command-line options: 
# usage: TEST_LIST [-h] --number NUMBER --duplicates DUPLICATES --databases 
#     DATABASES 
# TEST_LIST: error: the following arguments are required: --number, --duplicates, --databases 

編輯

@Fujia使得他們的答案很好。你可以做出這些位置參數而不是選項。這意味着您將使用python3 my_argparser.py 1 foo bar而不是​​。要做到這一點,使用下面的代碼:

import argparse 

if __name__ == '__main__': 
    parser = argparse.ArgumentParser(prog='TEST_LIST') 
    parser.add_argument('number', type=int) 
    parser.add_argument('duplicates') 
    parser.add_argument('databases') 
    args = parser.parse_args() 

# Output if you don't pass any command-line options: 
# usage: TEST_LIST [-h] number duplicates databases 
# TEST_LIST: error: the following arguments are required: number, duplicates, databases 

EDIT2

還請注意,這段代碼是錯誤的:

def __init__(self, number, duplicates, databases): 
    self.number = args.number 
    self.duplicates = args.duplicates 
    self.databases = args.databases 

你大概的意思是:

def __init__(self, number, duplicates, databases): 
    self.number = number 
    self.duplicates = duplicates 
    self.databases = databases 
0

你的程序的問題是參數名稱是prefi與短劃線-聯繫。

如果您只是在add_argument中使用number,duplicatesdatabases,則需要這三個參數。默認情況下,參數名稱前加上短劃線或雙短劃線將在分析過程中使它們成爲可選參數。您可以通過明確指定required參數來更改此行爲。