2011-07-11 110 views
10

(python)使用用戶輸入的文件路徑自動完成

我正在尋找抓取用戶輸入的文件路徑。這似乎很基本,但我似乎無法得到readline或rlcompleter的工作。

很多: variable = raw_input('Filepath:'),然後文件路徑具有自動完成功能,就像在shell中一樣。

我並不限於python,我願意使用任何語言,只要我可以設置變量作爲文件路徑並使用自動完成功能來獲取文件路徑即可。

我看到了這個:Tab completion in Python's raw_input()這幫助我瞭解了要查找什麼,儘管問題是它需要在文件路徑前面有一個命令,如「extra」。我需要將變量設置爲文件路徑。你會認爲這很簡單,但我沒有在任何地方發現太多東西,而我發現的那些東西並不完全是我所期待的。

在bash中有一個可以在命令行中運行的-e命令,但它在一個奇怪的腳本中無法識別。這正是我正在尋找的東西,只要它可以在腳本內部使用,以將變量設置爲自動完成的文件路徑。

+0

你是說你想要實現波形擴展,文件名匹配,shell變量擴展等嗎?請添加期望的輸入... –

回答

26

這樣的事情?

import readline, glob 
def complete(text, state): 
    return (glob.glob(text+'*')+[None])[state] 

readline.set_completer_delims(' \t\n;') 
readline.parse_and_bind("tab: complete") 
readline.set_completer(complete) 
raw_input('file? ') 
+0

完成器的這種實現方式比默認的方式差,因爲它似乎沒有正確地完成當前目錄之外的路徑。但是,儘管如此,謝謝你有趣的piece'o'code。 – eMPee584

+0

這似乎不適用於相對(即'../ ')'或'〜/ '。有誰知道爲什麼? – wovenhead

+0

out-of-cwd完成適用於我在OSX上:) 但輸出中的顏色不:( –

1

這只是鬆散的蟒蛇,我懷疑有可能是有人能破解這使你們各種問題......什麼的,但是這個方式是一種方法,我得到了bash和蟒蛇發揮出色一起。

import subprocess 

the_file=subprocess.check_output('read -e -p "Enter path file:" var ; echo $var',shell=True).rstrip()