2016-07-30 19 views
1

Für einen Bot im machen ich will in der Lage sein, die Temperatur des Pi laufen zu sehen (natürlich kann der Befehl nur von einem Entwickler verwendet werden). Mein Problem ist, dass ich nicht die Ausgabe des Terminalbefehls bekommen kann. Ich weiß in der Tat, dass der Befehl halb funktioniert, weil ich die korrekte Ausgabe auf dem Bildschirm des Pi sehen kann, aber der Bot gibt nur eine "0" an den Chat.Python, erfassen OS-Ausgabe und senden als Nachricht in Zwietracht

Dinge, die ich habe versucht:

async def cmd_temp(self, channel): 
    proc = subprocess.Popen('/opt/vc/bin/vcgencmd measure_temp', 
          stdout=subprocess.PIPE) 
    temperature = proc.stdout.read() 
    await self.safe_send_message(channel, temperature) 


async def cmd_temp(self, channel): 
    await self.safe_send_message(channel, 
     (os.system("/opt/vc/bin/vcgencmd measure_temp"))) 


async def cmd_temp(self, channel): 
    temperature = os.system("/opt/vc/bin/vcgencmd measure_temp") 
    await self.safe_send_message(channel, temperature) 

davon Jeder tut das Gleiche, bucht eine 0 im Chat und die Ausgabe auf dem Bildschirm des pi. Wenn jemand helfen kann, würde ich sehr zu schätzen es

Antwort

2

Die asyncio.subprocess-Modul kann Sie mit Teilprozessen in einer asynchronen Weise umgehen:

async def cmd_temp(self, channel): 
    process = await asyncio.create_subprocess_exec(
     '/opt/vc/bin/vcgencmd', 
     'measure_temp', 
     stdout=subprocess.PIPE) 
    stdout, stderr = await process.communicate() 
    temperature = stdout.decode().strip() 
    await self.safe_send_message(channel, temperature) 

weitere Beispiele in den asyncio user documentation See.