[英]Parsing python command line arguments
完成新手問題。
我正在開發用於使用API搜索電影數據庫的類。
這是在Python解釋器中使用電影標題和年份進行查詢的方法:
import moviesearch
movie_db = moviesearch.MovieSearch()
result = movie_db.search('Clockwork Orange', year='1971')
print result
進行此特定查詢會從我正在使用的服務中產生一個結果。
為了保存用於測試的輸入,我創建了以下腳本m.py:
from sys import argv
import moviesearch
script, movie_name, params = argv
movie_db = moviesearch.MovieSearch()
result = movie_db.search(movie_name, params)
print result
當我像這樣執行此腳本時:
python m.py 'Clockwork Orange', year='1971'
該服務產生兩個結果。
因此,這意味着在使用腳本測試類時,格式化參數的方式存在問題。 有人可以告訴我我做錯了嗎?
我不包括用於查詢電影數據庫的類,因為我認為找出問題所在不是必需的。 我需要知道的是如何在使用腳本時正確格式化參數,以使其執行完全與上面示例中的操作完全一樣,在上面的示例中,我直接從Python解釋器中使用類。
在此先感謝您的幫助。
在外殼中執行此操作時(我假設一個* nix平台具有與sh兼容的外殼; Windows可能略有不同):
python m.py 'Clockwork Orange', year='1971'
sys.argv
列表將是:
['m.py', 'Clockwork Orange,', 'year=1971']
因此,當您這樣做時:
script, movie_name, params = argv
您最終將movie_name
設置為字符串'Clockwork Orange,'
(帶有一個逗號),並將params
設置為字符串'year=1971'
。 因此,您的電話最終是:
result = movie_db.search('Clockwork Orange,', 'year=1971')
這與以下內容不同:
result = movie_db.search('Clockwork Orange', year='1971')
那么,您如何得到想要的?
好了,您可以使用以下代碼解析參數:
params = dict(pair.split('=') for pair in argv[2:])
result = movie_db.search(movie_name, **params)
第一行將為您提供{'year': '1971'}
的dict
。 然后,您可以使用**
語法將該dict
作為該函數的關鍵字參數轉發。
最后,您應該在用於運行腳本的參數中刪除多余的逗號。 (您可以編寫代碼來剝離它,但看來這只是一個錯字,所以更好的解決方法是不要做那個錯字。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.