Digamos que nuestro Script requiere una contraseña, pero dado que el script está diseñado para uso interactivo, es probable que solicite una contraseña al usuario en lugar de codificarla en el script.
El módulo getpass de Python hace precisamente lo que se necesita. Permitirá al usuario solicitar fácilmente una contraseña sin que la contraseña tecleada se muestre en el terminal del usuario.
Código #1: ¿Cómo se hace?
import getpass user = getpass.getuser() passwd = getpass.getpass() # must write svc_login() if svc_login(user, passwd): print('Yay !') else: print('Boo !')
En el código anterior, la svc_login()
función es un código que se escribe para seguir procesando la entrada de la contraseña. Obviamente, el manejo exacto es específico de la aplicación. En el código anterior getpass.getuser()
, no se solicita al usuario su nombre de usuario. En su lugar, utiliza el nombre de inicio de sesión del usuario actual, según el entorno de shell del usuario o, como último recurso, según la base de datos de contraseñas del sistema local (en plataformas que admiten el módulo pwd ).
Para solicitar explícitamente al usuario su nombre de usuario, que puede ser más confiable, se utiliza la función de entrada integrada.
user = input('Enter your username: ')
También es importante recordar que es posible que algunos sistemas no admitan la ocultación de la contraseña ingresada en el getpass()
método. En este caso, Python hace todo lo posible para advertir al usuario de los problemas (es decir, alerta al usuario de que las contraseñas se mostrarán en texto no cifrado) antes de continuar.
Ejecutar un comando externo y obtener su salida –
Código #2: Usando la subprocess.check_output()
función
import subprocess out_bytes = subprocess.check_output(['netstat', '-a'])
Esto ejecuta el comando especificado y devuelve su salida como una string de bytes. Para interpretar los bytes resultantes como texto, agregue un paso de decodificación adicional como se muestra en el código que figura a continuación:
Código #3:
out_text = out_bytes.decode('utf-8')
Si el comando ejecutado devuelve un código de salida distinto de cero, se genera una excepción.
Código #4: Detectar errores y obtener la salida creada junto con el código de salida
try: out_bytes = subprocess.check_output(['cmd', 'arg1', 'arg2']) except subprocess.CalledProcessError as e: # Output generated before error out_bytes = e.output # Return code code = e.returncode
Por defecto,
Código n.º 5: usar el argumento stderr para obtener tanto la salida estándar como el error recopilado
out_bytes = subprocess.check_output( ['cmd', 'arg1', 'arg2'], stderr = subprocess.STDOUT)
Código # 6: use el argumento de tiempo de espera() para ejecutar un comando con un tiempo de espera.
try: out_bytes = subprocess.check_output(['cmd', 'arg1', 'arg2'], timeout = 5) except subprocess.TimeoutExpired as e: ...
Normalmente, los comandos se ejecutan sin la ayuda de un shell subyacente (por ejemplo, sh, bash, etc.). En su lugar, la lista de strings proporcionada se proporciona a un comando del sistema de bajo nivel, como os.execve(). Para que el comando sea interpretado por un intérprete de órdenes, suminístrelo usando una string simple y proporcione el argumento shell=True. Esto a veces es útil si se intenta que Python ejecute un comando de shell complicado que involucre conductos, redirección de E/S y otras funciones, como se muestra a continuación:
código n.º 7:
out_bytes = subprocess.check_output( 'grep python | wc > out', shell = True)
Ejecutar comandos bajo el shell es un riesgo de seguridad potencial si los argumentos se derivan de la entrada del usuario. La shlex.quote()
función se puede usar para citar correctamente los argumentos para incluirlos en los comandos de shell en este caso.
Publicación traducida automáticamente
Artículo escrito por manikachandna97 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA