2014-04-03 75 views
1

我試圖寫一個接受可選輸入參數加上輸入文件的Python腳本:如何獲得的參數沒有名字在Python

./script --lines 1 file.txt

應採取1的行數(--lines)和然後以file.txt作爲輸入文件。但是,getopt甚至沒有看到「file.txt」,因爲它前面沒有參數名稱。

如何獲取文件名?我已經使用sys.arv[-1]考慮,但這意味着當我運行:

./script --lines 1

然後1將作爲輸入文件名。然後我的腳本將拋出一個錯誤(如果沒有名爲1文件存在):

error: file '1' no found

這工作,但不是一個很好的解決方案。有沒有解決的辦法?

+0

使用'argparse'模塊... – Dunno

+0

一種可能的解決方法是檢查sys.argv [-1]是否爲有效文件。 –

回答

5

肯定使用​​- 這是包含在python2.7 +,可以很容易地安裝了舊版本:

parser = argparse.ArgumentParser() 
parser.add_argument('--lines', type=int, default=0, help='number of lines') 
parser.add_argument('file', help='name of file') 
namespace = parser.parse_args() 
print namespace.lines 
print namespace.file 
+0

用ArgumentParser替換getopt將我的代碼大小減少了幾十行。這是要走的路。 – pap42

+0

@ pap42 - 聽力讓我很開心。我想這就是python團隊從'getopt' - >'optparser' - >'argparse'去的原因... – mgilson

3

在調用getopts

opts, args = getopts(...) 

第二個元素是一個沒有被getopts識別的參數列表。在你的例子中,它將是一個包含單個項目'file.txt'的列表。

+0

正是我需要的。謝謝。 – pap42

相關問題