2011-07-11 11 views
10

(python)filepath autocompletion utilizando la entrada de usuarios

Estoy buscando obtener una entrada de usuarios para un archivo. Parece bastante básico, pero parece que no puedo trabajar en readline o rlcompleter.

Bastante: variable = raw_input ('Filepath:') y luego el filepath tiene funciones de autocompletar como lo haría en un shell.

No estoy restringido a Python, estoy dispuesto a usar cualquier idioma siempre que pueda establecer una variable como ruta de archivo y tomar la ruta de archivo usando la funcionalidad de autocompletar.

He visto esto: Tab completion in Python's raw_input() que me ayudó a tener una idea de qué buscar, aunque el problema era que requería un comando delante de la ruta del archivo como "extra". Necesito establecer la variable como ruta de archivo. Uno pensaría que sería bastante simple, pero no he encontrado mucho en él, y los pocos que encontré no eran exactamente lo que estaba buscando.

En bash había un comando read -e que se puede ejecutar en una línea de comando, pero no se reconoce en un script que era impar. Es exactamente lo que estaba buscando, si solo se pudiera utilizar dentro de una secuencia de comandos para establecer la variable igual a la ruta de archivo autocompletada.

+0

¿quiere decir que desea implementar tilde-expansion, file-name-globbing, shell-variable expansion, etc.? Por favor, agregue la entrada esperada ... –

Respuesta

26

¿Algo como esto?

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

Esta implementación de un completer es inferior a la predeterminada ya que no parece completar correctamente las rutas fuera del directorio actual. Pero gracias, sin embargo, por el interesante pedazo de código. – eMPee584

+0

Esto no parece funcionar para relativo (es decir, '../ ')' o '~/'. ¿Alguien sabe por qué? – wovenhead

+0

finalización de tareas pendientes para mí en OSX :) pero los colores en la salida no :( –

1

Ésta es solamente libremente pitón y sospecho que probablemente hay maneras de que alguien pueda piratear esto y causar todo tipo de problemas ... o algo, pero esta es una manera me dieron el golpe y jugar bien pitón juntos.

import subprocess 

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