2016-07-30 5 views
1

私はそれを実行しているパイの温度を表示できるようにしたいのです(もちろん、コマンドは開発者のみが使用できます)。私の問題は、私はターミナルコマンドの出力を得るためにシームを傾けることです。私はpiの画面上で正しい出力を見ることができるので、コマンド半分が動作するという事実を知っていますが、ボットはチャットに「0」しか投稿しません。Pythonは、OSの出力をキャプチャして不一致でメッセージとして送信します

私がしようとしているもの:

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) 

これらのそれぞれは、同じことを行い、チャットに0をポストし、PIの画面に出力。誰が助けることができるならば、私はそれが

答えて

2

asyncio.subprocessモジュールを使用して、非同期にサブプロセスを扱うことができます大幅に感謝したい:

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) 

asyncio user documentationでより多くの例を参照してください。

関連する問題