Pregunta

Actualmente estoy teniendo un gran problema con un script de python.La secuencia de comandos se ejecuta comandos arbitrarios a través de un controlador para convertir incorrecto informes de errores a corregir los informes de errores.

El problema que estoy teniendo es conseguir que el script funcione correctamente en windows con un comando que contiene el signo en su camino.He intentado citando el comando, escapando de la y comercial con ^ y ninguno de los dos trabajos.Ahora estoy sin ideas.Alguna sugerencia?

Para aclarar a partir de las respuestas actuales:

  1. Estoy utilizando el módulo subprocess
  2. Estoy pasando la línea de comandos + de argumentos en forma de lista
  3. El problema está en la ruta de acceso a la propia orden, no de cualquiera de los argumentos
  4. He intentado citando el comando.Se hace un [Error 123] The filename, directory name, or volume label syntax is incorrect error
  5. Estoy usando el shell no argumento (por lo shell=false)
  6. En caso importa, me estoy agarrando de una tubería a stderr para su procesamiento, pero haciendo caso omiso de stdout y stdin
  7. Es sólo para su uso en Windows en la actualidad, y funciona como se esperaba en todos los otros casos que he probado hasta ahora.
  8. El comando que está fallando es:

p = subprocess.Popen(prog, stderr = subprocess.De la TUBERÍA, bufsize=-1)

cuando el primer elemento de la lista 'prog' contiene cualquier signo.Citando esta primera cadena no funciona.

¿Fue útil?

Solución

Asegúrese de que está utilizando listas y no la expansión de la shell:

subprocess.Popen(['command', 'argument1', 'argument2'], shell=False)

Otros consejos

Una respuesta apropiada se necesita más información que eso.¿Qué estás haciendo?¿Cómo no?¿Estás usando el módulo subprocess?Se le pasa una lista de argumentos y shell=False (o shell no argumento) o que realmente la invocación de la concha?

Trate de citar el argumento que contiene el &

wget "http://foo.com/?bar=baz&baz=bar"

Generalmente es lo que se ha hecho en una shell de Linux

"escapar de la y comercial con ^"

Está usted seguro de ^ es un carácter de escape para Windows?En caso de no utilizar \?

Para responder a mi propia pregunta:

Citando la orden real al pasar los parámetros como una lista no funciona correctamente (comando es el primer elemento de la lista) para resolver el problema me volví a la lista en un espacio separado de la cadena y pasa que en subprocess lugar.

Las mejores soluciones bienvenidos.

Yo trate de una situación como la siguiente:

exe = 'C:/Program Files (x86)/VideoLAN/VLC/VLC.exe'
url = 'http://translate.google.com/translate_tts?tl=en&q=hello+world'
subprocess.Popen([exe, url.replace("&","^&")],shell=True)

Esto hace el trabajo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top