2011-07-11 109 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()