Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Molestia en salida de comando
#1
Hola, estoy haciendo llamadas al sistema con Python3 y me molesta por ejemplo que cuando almaceno la salida de un comando en una variable e imprimo esa variable, aparece por ejemplo esto: b'1\n'

Esa salida es de 


Código:
subprocess.run("who > /home/sergio/Comandos/who.txt",shell=True)
a=subprocess.check_output("wc -l /home/sergio/Comandos/who.txt",shell=True)
print(a)

Solo quiero que salga en número 1, y no el b'\n'
¿Alguien me ayuda?
Responder
#2
Hola Sergio. La b indica que es una instancia del tipo bytes, que tienes que decodificar para convertirla a una cadena. Por otro lado, el carácter de salto de línea puedes removerlo vía el método strip().

Entonces:

  1. >>> a = b"1\n"
  2. >>> a.decode("utf-8").strip()
  3. '1'


Saludos
Responder
#3
(21-08-2018, 08:27 PM)Francisco escribió:
  1. >>> a = b"1\n"
  2. >>> a.decode("utf-8").strip()
  3. '1'

Muchas gracias por tu respuesta, pero, ¿que significa utf-8? También lo e visto en algunos scripts en la parte de arriba

Además tengo otro problema, estoy haciendo un script con python para saber cuando alguien se a conecatdo a mi sistema mediante ssh en linux mint, tengo esto:
Código:
#! /usr/bin/python3
import subprocess

subprocess.run("who > /home/sergio/Comandos/who.txt",shell=True)
a=subprocess.check_output("cat $HOME/Comandos/who.txt|wc -l",shell=True)
b=a.decode("utf-8").strip()
print(b)

if b>1:
subprocess.run("zenity --info --text 'Alguien se a conectado'", shell=True)

Pero me sale este error:

Traceback (most recent call last): File "/home/sergio/github/python.file/ssh2.py3", line 14, in if b>1: TypeError: '>' not supported between instances of 'str' and 'int' [Finished in 0.5s with exit code 1] [cmd: ['/usr/bin/python3', '/home/sergio/github/python.file/ssh2.py3']] [dir: /home/sergio/github/python.file] [path: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games]
Responder
#4
Cuando conviertes una cadena (str) a una instancia de bytes, debes hacerlo usando alguna codificación de caracteres. UTF-8 es una de ellas, la más utilizada, aunque también hay otras.

El error que obtienes surge de comparar una cadena con un número. Puedes resolverlo convirtiendo la salida del comando en un entero, en tanto tengas la certeza que se trata de un número.

  1. b = int(a.decode("utf-8").strip())
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)