Pythonista, de commands.getoutput a Popen

hace 8 años que se deprecó commands, y el japones seguia alerta en su isla desierta, sin saber que la guerra ya habia terminado.

pasos:

  • partimos de un comando en un string
  • el resultado es la salida, como string, para ser procesado por quien siga
  • pasar el string del comando por shlex.split:
    args = shlex.split(comando)
    proceso = Popen(args, stdout=PIPE, stderr=PIPE, shell=False)
    salida, error = proceso.communicate()
    if proceso.returncode !=0:
        print("mal")

    Despues hay que atender al contenido de proceso.returncode, si es distinto de cero, algo ha ido mal

  • para dos comandos unidos por pipe:
mensaje = "sensor.medida.temp {} {}".format( t, int(time()))
logging.debug(mensaje)
comando1 = ['echo ',  mensaje ]
comando2 = [ 'nc', '-q0', CARBON_SERVER, CARBON_PORT]
proc1 = Popen(comando1, stdout=PIPE, shell=False)
proc2 = Popen(comando2, stdin=proc1.stdout, stdout=PIPE, shell=False)
logging.debug(proc2.communicate()[0]
  • habiendo importado lo necesario:
from subprocess import Popen, PIPE