在Python應用程序中,始終存在一些參數需要在運行時設置。例如,在運行Python腳本時,我們可能需要指示腳本讀取的文件的位置或要執行哪個函數等等。Python argparse庫提供了一種方便而靈活的方法處理命令行參數。argparse模塊幫助我們定義和解析命令行參數,自動生成幫助文檔。
一、添加命令行參數
argparse庫讓我們能夠輕鬆地定義命令行參數。我們可以使用add_argument()方法來添加我們需要的參數。
import argparse if __name__ == '__main__': parser = argparse.ArgumentParser(description='Process some integers.') parser.add_argument('integers', metavar='N', type=int, nargs='+', help='an integer for the accumulator') parser.add_argument('--sum', dest='accumulate', action='store_const', const=sum, default=max, help='sum the integers (default: find the max)') args = parser.parse_args() print(args.accumulate(args.integers))
在上面的示例中,我們定義了一個描述性的解析器實例。我們通過調用add_argument()方法來指定我們想要的參數變量的名稱並給出幫助信息。在我們的例子中,’integers’參數是必需的,並且可以接受多個整數值。我們還定義了一個可選的’–sum’參數來指示argparse計算總和而不是查找最大值。在解析命令行參數之後,輸出函數結果。
二、使用簡潔參數
有時你可能想在命令行中使用一個簡單的參數放在開頭以啟動某些操作。例如,你可以使用一個’-v’參數來啟用程序的詳細模式。
import argparse if __name__ == '__main__': parser = argparse.ArgumentParser(description='Process some integers.') parser.add_argument('-v', '--verbose', dest='verbose', action='store_true', help='increase output verbosity') args = parser.parse_args() if args.verbose: print('Verbose mode is on') else: print('Verbose mode is off')
在以上示例中,我們添加了一個簡潔的參數’-v’和一個對應的參數’–verbose’。我們使用’store_true’屬性來將參數’true’值存儲到我們的args命名空間中表示希望打印詳細的輸出。
三、定義互斥參數
有時,我們需要在多個選項中只選一個。例如,在一個應用程序中,我們可能需要使用’-r’選項刪除某個文件,或者使用’-l’選項列出某個目錄。為了避免混淆並提高代碼錯誤率,我們希望同時選一-h’參數和’-l’或’-r’的參數選項。解決這個問題的一種方式是使用互斥組。
import argparse if __name__ == '__main__': parser = argparse.ArgumentParser(description='Process some integers.') group = parser.add_mutually_exclusive_group() group.add_argument('-l', '--list', action='store_true', help='list directory contents') group.add_argument('-r', '--remove', action='store_true', help='remove file') parser.add_argument('-v', '--verbose', dest='verbose', action='store_true', help='increase output verbosity') args = parser.parse_args() if args.list: print('List mode is on') elif args.remove: print('Remove mode is on') else: parser.print_help()
在以上示例中,我們使用了add_mutually_exclusive_group()方法來指定我們不希望同時設置’-l’和’-r’參數,因為它們都是有互斥的。只能選用其中之一。當’-l’選項被選中時,隱藏’–remove’選項,反之亦然。
四、指定參數的數據類型和範圍
使用argparse庫,我們可以指定參數的數據類型。有時,命令行參數需要具有特定的範圍和數據類型(整數,浮點數等)。我們可以使用type屬性來指定參數是什麼數據類型,使用choices屬性來定義列表範圍,使用range屬性來指定整數的取值範圍。
import argparse if __name__ == '__main__': parser = argparse.ArgumentParser(description='Process some integers.') parser.add_argument('--age', dest='age', type=int, choices=range(0, 130), help='Age in years') parser.add_argument('--gender', dest='gender', choices=['male', 'female'], help='Gender') args = parser.parse_args() if args.age and args.gender: print('Age: {}, Gender: {}'.format(args.age, args.gender)) else: parser.print_help()
在以上示例中,我們使用type屬性來指定’–age’參數是整數。我們還使用choices屬性來定義該值的有效範圍。類似地,對於’–gender’參數,我們使用choices屬性來指定列表的有效性。
五、自動生成幫助
argparse庫讓我們可以輕鬆地生成程序使用幫助。如果我們要使用大量的複雜參數和選項,代碼文檔可能變得非常長。我們可以使用argparse庫自動生成幫助信息。
import argparse if __name__ == '__main__': parser = argparse.ArgumentParser(description='Process some integers.') parser.add_argument('--age', dest='age', type=int, choices=range(0, 130), help='Age in years') parser.add_argument('--gender', dest='gender', choices=['male', 'female'], help='Gender') parser.add_argument('--file', dest='file', type=argparse.FileType('w'), help='Output file') args = parser.parse_args() if args.age and args.gender: print('Age: {}, Gender: {}'.format(args.age, args.gender)) else: parser.print_help()
在以上示例中,我們添加了一個’–file’選項以將結果寫入到文件中。我們使用argparse.FileType(‘w’)來創建一個新文件並將其綁定到該文件。運行腳本時,使用’-h’或’–help’可以輸出程序的描述和所有指定參數的用法說明。
六、結論
Python argparse庫是一種非常靈活的工具,可以簡化Python應用程序中的命令行參數處理。它使我們能夠定義argv字符串的類型、可選的參數與必選的參數、參數的有效或無效的值域檢查和自動生成幫助文檔等等。使用argparse庫,我們能夠輕鬆地解析和處理命令行參數,使我們的程序更容易使用和維護。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/187123.html