Entorno de ejecución

sys proporciona una interfaz de programación de bajo nivel para interactuar con el sistema fuera de una aplicación, al aceptar argumentos de la línea de comandos, acceder a la entrada del usuario y pasar mensajes y valores de estado al usuario.

Argumentos de línea de comando

Los argumentos capturados por el intérprete se procesan allí y no se pasan al programa que se está ejecutando. Todas las opciones y argumentos restantes, incluido el nombre de la secuencia de comandos en sí, se guardan en sys.argv en caso de que el programa necesite usarlos.

sys_argv.py
import sys

print('Arguments:', sys.argv)

En el tercer ejemplo, el intérprete entiende la opción -u y no se pasa al programa que se está ejecutando.

$ python3 sys_argv.py

Arguments: ['sys_argv.py']

$ python3 sys_argv.py -v foo blah

Arguments: ['sys_argv.py', '-v', 'foo', 'blah']

$ python3 -u sys_argv.py

Arguments: ['sys_argv.py']

Ver también

  • argparse – Módulo para analizar argumentos de línea de comando.

Flujos de entrada y salida

Siguiendo el paradigma de Unix, los programas Python pueden acceder a tres descriptores de archivos de forma predeterminada.

sys_stdio.py
import sys

print('STATUS: Reading from stdin', file=sys.stderr)

data = sys.stdin.read()

print('STATUS: Writing data to stdout', file=sys.stderr)

sys.stdout.write(data)
sys.stdout.flush()

print('STATUS: Done', file=sys.stderr)

stdin es la forma estándar de leer la entrada, generalmente desde una consola, pero también desde otros programas a través de un canal. stdout es la forma estándar de escribir la salida para un usuario (en la consola) o para enviarla al siguiente programa en un canal. stderr está diseñado para usarse con mensajes de advertencia o error.

$ cat sys_stdio.py | python3 -u sys_stdio.py

STATUS: Reading from stdin
STATUS: Writing data to stdout
#!/usr/bin/env python3

#end_pymotw_header
import sys

print('STATUS: Reading from stdin', file=sys.stderr)

data = sys.stdin.read()

print('STATUS: Writing data to stdout', file=sys.stderr)

sys.stdout.write(data)
sys.stdout.flush()

print('STATUS: Done', file=sys.stderr)
STATUS: Done

Ver también

  • subprocess y pipes – Tanto el subproceso como los canales tienen características para canalizar programas juntos.

Devolver el estado

Para devolver un código de salida de un programa, pasa un valor entero a sys.exit().

sys_exit.py
import sys

exit_code = int(sys.argv[1])
sys.exit(exit_code)

Un valor distinto de cero significa que el programa salió con un error.

$ python3 sys_exit.py 0 ; echo "Exited $?"

Exited 0

$ python3 sys_exit.py 1 ; echo "Exited $?"

Exited 1