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.

¿Cómo ejecutar convertir este script de lote para que se pueda ejecutar en línea de comandos y ser llamado por Python?

Tienes este script por lotes que necesito poder ejecutar en Python sin tener ni llamar al archivo por lotes externo. Estoy tratando de averiguar cómo puedo ejecutar este mismo script solo en la línea de comandos para poder usar subprocess para hacer algo como:

cmd = '''
SETLOCAL ENABLEDELAYEDEXPANSION
for %i in (*.exr) do (
    set z=%i
    magick %i !z:exr=pfm!
)
'''
subprocess.check_output(cmd, shell=True, cwd=convdir)

pero no puedo hacer que funcione. ¿Cuál es el mejor método para hacer esto?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema principal está en el uso de dos signos de porcentaje en el script por lotes original. Estos se utilizan para indicar una variable en lotes, pero pueden causar problemas al intentar ejecutar los comandos directamente en una shell o llamada de subproceso.

    Una posible solución sería reemplazar los dos signos de porcentaje por un solo signo de porcentaje y luego usar la sintaxis adecuada para reemplazar cadenas en Python. Por ejemplo:

    cmd = '''
        SETLOCAL ENABLEDELAYEDEXPANSION
        for %%i in (*.exr) do (
            set z=%%i
            magick %%i !z:exr=pfm!
        )
        '''
    
    cmd = cmd.replace('%%', '%')
    
    subprocess.check_output(cmd, shell=True, cwd=convdir)
    

    Esto debería permitir que el script se ejecute directamente en una llamada de subproceso sin necesidad de llamar a un archivo por lotes externo.

Comments are closed.