1. 程式人生 > 實用技巧 >Python中處理命令列引數的3種方法

Python中處理命令列引數的3種方法

作者|Dardan Xhymshiti
編譯|VK
來源|Towards Data Science

1.sys模組

Python中的sys模組具有argv功能。當通過終端觸發main.py的執行時,此功能返回所有命令列引數的列表。返回列表中的第一個元素是main.py.

考慮下面的main.py示例

import sys

list_of_arguments = sys.argv

print(list_of_args[0]) 
print(list_of_args[1]) 
print(list_of_args[2]) 
print(list_of_args[3])

觸發main.py:

python main.py first_arg "[second_arg]" "{\"arg\": 3}"

返回:

test.py
first_arg
[second_arg]
{"arg": 3}

2.帶有大引數的sys模組

這是一種為Python程式碼提供引數的簡單又強大的方法。它不是提供提供多個引數,而是提供單個“大”引數。這一個大引數是一個字典,鍵表示引數名,值表示它們的對應值。

由於在Python中讀取時,dictionary引數被表示為字串,因此應該將其轉換為字典。這可以通過使用ast.literal_eval或者json.loads函式做到。ast或json模組需要相應地匯入。

考慮下面的main.py示例:

import sys
import ast

raw_arguments = sys.argv[1]

print(raw_arguments)
arguments = ast.literal_eval(raw_arguments)

print(arguments['name']) # John
print(arguments['surname']) # Doe
print(arguments['age']) # 22

觸發mian.py:

python main.py "{\"name\": \"John\", \"surname\": \"Doe\", \"age\": 22}"

返回:

{"name": "John", "surname": "Doe", "age": 22}
John
Doe
22

3.argparse模組

如果你想為應用程式提供適當的命令列介面,那麼argparse就是要使用的模組。這是一個成熟的模組,提供開箱即用的引數解析、幫助訊息以及引數被誤用時會自動丟擲錯誤。Python預設安裝此模組。

要充分利用argparse提供的功能,需要一些時間來掌握。作為一個示例,考慮以下示例main.py:

import argparse

parser = argparse.ArgumentParser(description='Personal information')
parser.add_argument('--name', dest='name', type=str, help='Name of the candidate')
parser.add_argument('--surname', dest='surname', type=str, help='Surname of the candidate')
parser.add_argument('--age', dest='age', type=int, help='Age of the candidate')

args = parser.parse_args()
print(args.name)
print(args.surname)
print(args.age)

初始化ArgumentParses的物件後,我們使用add_argument函式新增所有引數。此函式接收許多引數,其中包括引數名稱(例如--name)、目標變數、預期資料型別、要顯示的幫助訊息等。

觸發main.py:

python main.py --name John --surname Doe --age 22

返回

John
Doe
22

要了解有關此模組的更多資訊,請檢視argparse文件:https://docs.python.org/2/library/argparse.html

結論

很多時候,你需要向Python指令碼傳遞引數。Python通過sys模組提供對這些引數的訪問。你可以直接訪問argv並處理自己的引數解析,也可以使用其他模組例如argparse為你完成這項工作。

在我的日常程式設計生活中,如果我是程式碼的唯一使用者,我會使用sys時;如果這程式碼準備用於生產時,我會使用argparse。

原文連結:https://towardsdatascience.com/3-ways-to-handle-args-in-python-47216827831a

歡迎關注磐創AI部落格站:
http://panchuang.net/

sklearn機器學習中文官方文件:
http://sklearn123.com/

歡迎關注磐創部落格資源彙總站:
http://docs.panchuang.net/