2016-05-03 41 views
0

我寫了一個Python腳本,我現在正試圖通過命令行運行。它由一個函數組成,它帶有一個強制性的和一些可選的參數。使用sys.argv通過終端輸入

def main(input_folder, iterations = 1000, probability_cutoff = - 40 , threshold = 10): ...

現在我想通過像這樣的命令行,使其可執行:

if __name__ == "__main__": main(sys.argv[1])

因爲我把只有一個參數,這種只要作品好;但我不知道如何接受sys.argv作爲列表提供的附加的可選輸入。

  • 有沒有一種簡單的方法來做到這一點?
  • 還是有必要使用額外的模塊,如 argparse
  • 我嘗試將關鍵字參數提供給函數,但 也無法使其工作 - 這是一種可行的方法嗎?

我在Mac上使用Python 2.7。任何幫助深表感謝!

+0

我會說這是一個重複【如何提取一個列表參數,並將其傳遞給一個函數調用(http://stackoverflow.com/questions/7527849/how-to-extract-parameters-from-a-list-and-pass-them-to-a-function-call),因爲這是你所要求的機制(以及[1: ]'跳過第一項argv) –

+0

這可能是真的,但我沒有找到一個,因爲我沒有使用正確的搜索條件。我應該刪除這個嗎? – patrick

+0

根本沒有,其他人試圖解開'sys.argv'(像你),但沒有使用正確的搜索條件來找到相關的問題(像你)會發現這個問題,它會幫助他們。 –

回答

2

我總是使用argparse,因爲它給你很好的錯誤處理,將字符串轉換爲整數或打開文件,並清楚地記錄選項。然而,這應該做你想做的:

if __name__ == "__main__": 
    main(*sys.argv[1:]) 
+0

你搖滾先生,謝謝! – patrick