2013-02-24 113 views
0

在Python中使用optparse來處理Unix樣式通配符參數的正確方法是什麼?我有:從Python的命令行讀取Unix通配符文件名

myscript.py: 

from optparse import OptionParser 
parser = OptionParser() 
parser.add_option("--input", dest="input", default=None, nargs=1) 
parser.add_option("--outdir", dest="outdir", default=None, nargs=1) 
(options, args) = parser.parse_args() 

我希望能夠做到:

myscript.py --input *.txt --outdir mydir/

我不想讀不一定所有的文件匹配*.txt內容。我想要myscript.py訪問它們的文件名,因爲有些腳本只是將文件名傳遞給其他程序而不需要打開/讀取文件。我怎樣才能得到一個返回文件名的迭代器,同時仍然允許其他參數如--outdir在通配符友好選項(在這種情況下爲--input)之後傳遞?謝謝。

+1

您是否考慮到UNIX shell會自行擴展此glob? – wRAR 2013-02-24 00:06:38

+0

@wRAR如果他們擴大它,這是否意味着我通過了一個文件名列表?如果* .txt總是被翻譯爲a.txt,b.txt,...等,那就沒有問題了。但我不認爲這會發生什麼 – user248237dfsf 2013-02-24 00:07:58

+0

是的,它將被擴展爲空格分隔的文件名列表。 – wRAR 2013-02-24 00:21:20

回答

2

Unix shell在把它們傳遞給你的程序之前會將其擴展爲單獨的參數; Windows的命令解釋器不會。

假設您使用的環境不是首先展開 - 也就是調用python prog.py '*.txt',例如,您可以使用glob.glob()自行進行展開。

+0

儘管需要單引號是不尋常的..我希望我的程序像其他Unix工具一樣工作。像'wc * .txt'。用glob解析它看起來很複雜 - 如果我傳入一個帶有'*'的文件名?我怎麼知道它是一個擴展的glob還是文件名的一部分? – user248237dfsf 2013-02-24 00:08:47