2012-10-24 20 views
5

我試圖創建一個可以從命令行調用的程序,並在python 2.6中使用關鍵字參數。到目前爲止,我已經試過:python可執行文件中的kwargs

#!/usr/bin/python 
def read(foo = 5): 
    print foo 
    return 0 
if __name__ == '__main__' 
    read() 

當我嘗試在命令行中運行以下命令:./test.py計劃印刷5預期。有沒有辦法使用./test.py foo=6?我想保留關鍵字參數。

這似乎是一個簡單的問題,但我還沒有找到一個好的來源。

+2

請看一下['argparse'](http://docs.python.org/dev/library/argparse.html)模塊,它僅用於此目的。 –

回答

6

python已經內置庫來幫助您實現將命令行參數傳遞給腳本 argparse。用法是有點不同的,那麼你在你的問題是描述什麼,但...

在基本層面上,你可以通過sys.argv訪問所有的命令行參數,這將是自變量

列表

對不起應該有提到蟒蛇2.6庫被稱爲optparse

+0

感謝您的快速評論。不幸的是我使用python 2.6,所以'argparse'沒有用,我還沒有弄清楚如何在關鍵字參數中使用'sys.argv',但我仍然在玩這個。 – greatscott

+1

@greatscott:在python2.6中有'getopt',應該在你的情況下做。 – SilentGhost

+1

2.6有optparse也 –

3

這樣的事情?

if __name__ == '__main__': 
    kwargs = dict(x.split('=', 1) for x in sys.argv[1:]) 
    read(**kwargs) 

這就是說,argparse和optparse很可能會給你一些更強大的和使用命令行的人更自然。 (更不用說支持字符串以外的其他類型的參數了。)

呵呵,如果你真的真的是之後只是交互使用你的函數,就用交互式解釋器;或者pythonipython。您需要將代碼放到以.py結尾的文件中,然後導入它,然後纔可以調用它。

+0

謝謝。我實際上是爲一個想要從命令行運行所有東西而不是通過'python'或'ipython'工作的同事寫這篇文章。我欣賞幫助。我會檢查'optparse'。 – greatscott

1

不太常用,但非常有趣的替代方法是docopt:一個庫,它可以從您爲程序編寫的幫助消息(on github)中生成參數解析器。