2011-03-29 539 views
29

trato de ejecutar un archivo .bat en Windows mediante secuencias de comandos de Python.ejecutar un archivo .bat utilizando el código Python

ask.bat archivo:

Application.exe work.xml 

que escribir código Python:

import os 
os.system("D:\xxx1\xxx2XMLnew\otr.bat ") 

de salida: cuando se intenta ejecutar el archivo es sólo darle un abrir y cerrar de la línea de comandos, y el trabajo no está funcionando .

Nota: Intento con una barra alternativa también, pero no está funcionando.

Y también quiero guardar la salida del archivo en otro archivo.

¿Puede alguien sugerir cómo puedo hacer que el script ejecutable.

+1

¿Intentó escapar de la barra diagonal inversa? Pruebe: 'os.system (" D: \\ xxx1 \\ xxx2XMLnew \\ otr.bat ")' – inspectorG4dget

+0

use/en vez de \ si no quiere escapar – EgMusic

Respuesta

23

Esto ya ha sido contestada en detalle en la SO. Echa un vistazo a este tema, se debe responder a todas sus preguntas: Executing a subprocess fails

he probado a mí mismo con este código:

batchtest.py

from subprocess import Popen 
p = Popen("batch.bat", cwd=r"C:\Path\to\batchfolder") 
stdout, stderr = p.communicate() 

Batch.bat

echo Hello World! 
pause 

Tengo la prueba por lotes. un ejemplo del hilo antes mencionado.

+0

Hola, das_weezul, gracias por la información. Intento qué se menciona allí pero para mí el mismo problema persiste, al ejecutar, un abrir y cerrar de ojos de la aplicación. viene y luego se apaga, no funciona – Silver

+0

mientras ejecuta este código, me vino un error: "Windows Error 2: el sistema no puede encontrar el archivo especificado", pero la ruta del archivo es correcta al 100% cambio la ubicación de la carpeta para probar qué u dijo .... código es de importación subproceso Popen p = Popen ("test.bat", cwd = r "C: \ XMLnew") stdout, stderr = p.communicate() – Silver

+3

@Silver: 'Popen () 'no se puede encontrar el archivo' test.bat'. En [docs] (http://docs.python.org/library/subprocess.html?highlight=popen#subprocess.Popen) dice "Si * cwd * no es' None', se cambiará el directorio actual del niño a * cwd * antes de que se ejecute. Tenga en cuenta que este directorio no se considera al buscar el ejecutable, por lo que ** no puede ** especificar la ruta del programa relativa a * cwd *. " – martineau

3

Reemplazar \ con/en el camino

import os 
os.system("D:/xxx1/xxx2XMLnew/otr.bat ") 
+1

Recomiendo usar os.path.normpath filepath = "D: /xxx1/xxx2XML/otr.bat" p = Popen (filepath, shell = True, stdout = subprocess.PIPE) stdout, stderr = p.communicate() print process.returncode # es 0 si el éxito –

16
import subprocess 

filepath="D:/path/to/batch/myBatch.bat" 
p = subprocess.Popen(filepath, shell=True, stdout = subprocess.PIPE) 

stdout, stderr = p.communicate() 
print p.returncode # is 0 if success 
+0

'shell = True' es lo que le permite ejecutar un .bat archivo en lugar de un .exe. –

+0

@ BobStein-VisiBone no, no lo es. Puede llamar a un archivo .bat desde Popen sin pasar shell = True, pero como observó martineau en la respuesta anterior, debe especificar la ruta absoluta al archivo .bat. – Nathan

0

Si usted está tratando de llamar a otro archivo exe dentro del bat -file. Debe usar SET Path dentro del archivo bat al que está llamando. establecer la ruta debe apuntar al directorio existe la exe -file se encuentra:

set PATH=C:\;C:\DOS  {Sets C:\;C:\DOS as the current search path.} 
3
  1. Es mejor escribir .bat archivo de tal manera que su funcionamiento no depende de directorio de trabajo actual, es decir, que recomiendo poner esta línea al principio del archivo de .bat:

    cd "%~dp0" 
    
  2. Enclose ruta de archivo de .bat archivo entre comillas dobles, es decir,:

    os.system('"D:\\x\\so here can be spaces\\otr.bat" ["<arg0>" ["<arg1>" ...]]') 
    
  3. Para guardar la salida de algunos comandos por lotes en otro archivo que se pueda utilizar habitual redirection syntax, por ejemplo:

    os.system('"...bat" > outputfilename.txt') 
    

    o directamente en el archivo de .bat:

    Application.exe work.xml > outputfilename.txt 
    
1

Probablemente la forma más sencilla de hacerlo es ->

import os 
os.chdir("X:\Enter location of .bat file") 
os.startfile("ask.bat") 
+0

No estoy seguro acerca de otros sistemas operativos, pero funciona en Windows :) –

Cuestiones relacionadas