es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Eres un traductor/a español/a que traduce documentos de IT. Traduce lo siguiente al español. Ejecuta dos comandos con subprocess.Popen Python. Ejecute dos comandos con subprocess.Popen Python.

Quiero ejecutar un archivo batch llamándolo desde un script de Python. El problema es que este batch necesita que la variable JAVA_HOME esté configurada. No quiero establecer esta variable en la variable de entorno del sistema, quiero hacerlo desde Python. ¿Hay alguna forma de ejecutar dos comandos batch de esta manera?


p = Popen("""set JAVA_HOME=D:\GIT\G_ATC_FCT_SW_HSM_Daimler\Tools\jdk-8.0.242.08-hotspot;D:\GIT\G_ATC_FCT_SW_HSM_Daimler\Tools\plugins\com.nxp.id.jcop.eclipse_6.0.0.8\cmds\converter.bat Java_Card_Converter-3.0.5""")
stdout, stderr = p.communicate()

Pero obtuve este error FileNotFoundError: [WinError 2] No se encuentra el archivo especificado. ¿Es posible hacerlo desde Popen?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible configurar la variable JAVA_HOME desde un script de Python y ejecutar un archivo por lotes utilizando popen. Una forma de hacerlo es utilizar el diccionario ‘os.environ’ para establecer la variable de entorno durante la duración del script. A continuación se muestra un ejemplo:

    import os
    from subprocess import Popen, PIPE
    
    # establecer variable de entorno JAVA_HOME
    os.environ['JAVA_HOME'] = 'D:\GIT\G_ATC_FCT_SW_HSM_Daimler\Tools\jdk-8.0.242.08-hotspot'
    
    # ejecutar el archivo por lotes
    batch_file = r'D:\GIT\G_ATC_FCT_SW_HSM_Daimler\Tools\plugins\com.nxp.id.jcop.eclipse_6.0.0.8\cmds\converter.bat'
    command = f'{batch_file} Java_Card_Converter-3.0.5'
    p = Popen(command, stdout=PIPE, stderr=PIPE)
    stdout, stderr = p.communicate()
    
    # imprimir la salida y los errores
    print(stdout.decode('utf-8'))
    print(stderr.decode('utf-8'))
    

    Tenga en cuenta que en este ejemplo, usamos una cadena sin formato para la ruta del archivo por lotes (r'ruta\al\archivo\por\lotes.bat') para evitar tener que escapar las barras invertidas. También utilizamos tuberías para capturar la salida y los errores del archivo por lotes, que imprimimos al final del script.

Comments are closed.