簡體   English   中英

解析python命令行參數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM