El subproceso.Método de ejecución
El subproceso.Ejecutar el método toma una lista de argumentos. Cuando se llama al método, ejecuta el comando y espera a que el proceso finalice, devolviendo un objeto de "proceso completo" al final. El objeto "CompleteProcess" devuelve STDOUT, STDERR, argumentos originales utilizados al llamar al método y un código de retorno. STDOut se refiere al flujo de datos producido por el comando, mientras que Stderr se refiere a cualquier error planteado durante la ejecución del programa. Cualquier código de retorno no distinto de cero (código de salida) significaría un error con el comando ejecutado en el subprocesos.Método de ejecución.
Ejemplo 1: Contenido de salida de un archivo de texto utilizando el subproceso.Método de ejecución
El siguiente comando producirá el contenido de un "datos.Archivo de txt ", suponiendo que contiene una cadena" nombre = John ".
importar subprocesosEjecutar el código anterior devolverá la siguiente salida:
Nombre = JohnEl primer elemento del argumento de la lista es el nombre del comando que se ejecutará. Cualquier elemento en la lista que siga el primer elemento se consideran opciones o conmutadores de línea de comandos. También puede usar guiones de tablero único y doble para definir las opciones. Por ejemplo, para enumerar archivos y carpetas en un directorio, el código estaría "subprocesos.ejecutar (["ls", "-l"] ". En la mayoría de estos casos, puede considerar cualquier argumento separado por el espacio en un comando shell como un elemento individual en la lista suministrada al subproceso.Método de ejecución.
Ejemplo 2: suprimir la salida del subproceso.Método de ejecución
Para suprimir la salida del subproceso.Método de ejecución, tendrá que suministrar "stDout = subprocesos.Devnull "y" stderr = subprocesos.Devnull ”como argumentos adicionales.
importar subprocesosEjecutar el código anterior producirá la siguiente salida:
Datos completos de procesos (args = ['cat',.txt '], returncode = 0)Ejemplo 3: Captura de salida de subproceso.Método de ejecución
Para capturar la salida del subproceso.Método Ejecutar, use un argumento adicional llamado "Capture_output = True".
importar subprocesosEjecutar el código anterior producirá la siguiente salida:
Datos completos de procesos (args = ['cat',.txt '], returncode = 0,Puede acceder individualmente a los valores de STDOUT y STDERR utilizando "salida.stdout "y" salida.Métodos de stderr ”. La salida se produce como una secuencia de bytes. Para obtener una cadena como salida, use "salida.stdout.Método Decode ("UTF-8") ". También puede suministrar "Text = True" como un argumento adicional para el subprocesamiento.Ejecutar la llamada para obtener la salida en formato de cadena. Para obtener el código de estado de salida, puede usar la "salida.método de returncode ".
Ejemplo 4: elevar la excepción al falla del comando ejecutado por subprocesos.Método de ejecución
Para plantear una excepción cuando el comando sale con un estado distinto de cero, use el argumento "cheque = true".
importar subprocesosEjecutar el código anterior producirá la siguiente salida:
elevar llamado ProcessError (RetCode, Process.argumentos,Ejemplo 5: pase una cadena al comando ejecutado por el subprocesos.Método de ejecución
Puede pasar una cadena al comando que se ejecutará por subprocesos.Ejecutar el método utilizando el argumento "input = 'string'".
importar subprocesosEjecutar el código anterior producirá la siguiente salida:
CompletyProcess (args = ['cat'], returncode = 0, stdout = 'datos.txt ', stderr = ")Como puede ver, el código anterior pasa "datos.txt "como una cadena y no como un objeto de archivo. Para pasar "datos.txt "Como archivo, use el argumento" stdin ".
con abre ("datos.txt ") como f:Ejecutar el código anterior producirá la siguiente salida:
CompletyProcess (args = ['cat'], returncode = 0, stdout = 'name = John \ n', stderr = ")Ejemplo 6: Ejecutar el comando directamente en shell usando el subproceso.Método de ejecución
Es posible ejecutar un comando directamente en un shell "tal cual", en lugar de usar una cadena dividida en el comando principal y las opciones que lo siguen. Para hacer esto, debe pasar "shell = verdadero" como argumento adicional. Sin embargo, esto es desanimado por los desarrolladores de Python, ya que el uso de "shell = true" puede conducir a problemas de seguridad. Puede leer más sobre implicaciones de seguridad desde aquí.
importar subprocesosEjecutar el código anterior producirá la siguiente salida:
Nombre = JohnConclusión
El subproceso.Ejecutar el método en Python es bastante poderoso, ya que le permite ejecutar comandos de shell dentro de la propia Python. Esto ayuda a limitar todo el código a Python sin la necesidad de tener un código de script de shell adicional en archivos separados. Sin embargo, puede ser bastante difícil tokenizar correctamente los comandos de shell en una lista de Python. Puedes usar el "shlex.Método Split () "para tokenizar comandos de shell simples, pero en comandos largos y complejos, especialmente aquellos con símbolos de tubería, SHLEX no puede dividir correctamente el comando. En tales casos, la depuración puede ser un tema complicado. Puede usar el argumento "shell = verdadero" para evitar esto, pero hay ciertas preocupaciones de seguridad asociadas con esta acción.