Tengo un archivo de script subprocess-script.py
de la siguiente manera:
import subprocess
import platform
command = []
exe = "ruta/a/miapp.app"
input = "/ruta/a/in.ext"
output = "/ruta/a/out.ext"
command.append('open')
command.append('-a')
command.append(f'"{exe}"')
command.append('--args')
command.append("--input")
command.append(f'"{input}"')
command.append("--output")
command.append(f'"{output}"')
command.append('-report')
print("EJECUTAR: ", " ".join(command))
subprocess.run(command, shell=True, check=True, capture_output=True, text=True)
Ejecuto el script usando el comando python3 subprocess-script.py
y obtengo la siguiente excepción:
user@macbookair ~ % python3 subprocess-script.py
EJECUTAR: open -a "ruta/a/miapp.app" --args --input "/ruta/a/in.ext" --output "/ruta/a/out.ext"
Traceback (most recent call last):
File "/ruta/a/subprocess-script.py", línea XX, in
result = subprocess.run(command, shell=True, check=True, capture_output=True, text=True)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/homebrew/Cellar/python@3.11/3.11.7_1/Frameworks/Python.framework/Versions/3.11/lib/python3.11/subprocess.py", línea 571, en run
raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: ¡El comando '['open', '-a', '"ruta/a/miapp.app"', '--args', '--input', '"/ruta/a/in.ext"', '--output', '"/ruta/a/out.ext"']' devolvió un estado de salida distinto de cero 1.
user@macbookair ~ %
Pero cuando tomo la declaración de impresión EJECUTAR y pruebo la declaración, funciona perfectamente y genera mi archivo de salida out.ext:
open -a "ruta/a/miapp.app" --args --input "/ruta/a/in.ext" --output "/ruta/a/out.ext"
Sospecho que estoy construyendo el comando incorrectamente? Toma nota de que uso comillas para mis rutas intencionalmente porque a veces las rutas contienen carpetas con espacios y eso fallará si no están encerradas entre comillas. También probé la bandera -report
como se menciona en este hilo pero no veo ningún archivo de registro generado. Esta información está ausente en la respuesta. Hay una solución potencial en este hilo donde la lista de comandos se transforma en una cadena usando " ".join(command)
pero no estoy seguro si esto es una solución temporal o la solución adecuada.
En Windows no tengo un problema donde construyo el comando de esta manera:
command.append('powershell')
command.append('-Command')
command.append(f'& "{exe}"')
command.append('--args')
command.append("--input")
command.append(f'"{input}"')
command.append("--output")
command.append(f'"{output}"')
¿Cuál podría ser el problema en la versión de Mac del script?