2012-08-07 59 views
9

Estoy tratando de crear un programa que escanea un archivo de texto y pasa los argumentos al subproceso. Todo funciona bien hasta que obtengo directorios con espacios en el camino.Manejo de directorios con espacios Python subprocess.call()

Mi método de división, que descompone los argumentos hace tropezar a lo largo de los espacios:

s = "svn move folder/hello\ world anotherfolder/hello\ world" 

task = s.split(" ") 
process = subprocess.check_call(task, shell = False) 

Do, ya sea necesito función para analizar los argumentos correctos, o que pasan toda la cadena en el subproceso sin romperlo abajo primero

Estoy un poco perdido.

+0

puede confiar en un número fijo de espacio delimitado izquierda tokens? –

+1

¿qué hay de los nombres de los archivos? –

+1

si crea el nombre de archivo que se está leyendo, ¿por qué no separar los valores de coma? y luego dividir en "," en lugar de todas las molestias? –

Respuesta

12

utilizar una lista en su lugar:

task = ["svn", "move", "folder/hello world anotherfolder/hello world"] 
subprocess.check_call(task) 

Si el archivo contiene comandos enteros, no sólo los caminos entonces usted podría intentar shlex.split():

task = shlex.split(s) 
subprocess.check_call(task) 
+3

+1 para [shlex] (http://docs.python.org/library/shlex). – RanRag

+0

gracias ¡gracias! usar una lista resuelve todo tipo de problemas de cotización/escape extraños +1 – Brian

Cuestiones relacionadas