2017-12-12 25 views
0

私は、ボタンが押されると、オーディオファイルが再生されるラズベリーパイにpythonでプログラムを書き込もうとしています。私はomxplayerを実行し、それを適切に閉じるさまざまな方法を試しましたが、どれもうまくいかないようです。すべてのヘルプをいただければ幸いですomxplayerが呼び出された後のPythonコードの処理

TypeError: a bytes-like object is required, not 'str' 

import RPi.GPIO as GPIO 
import time 
from time import sleep 
import subprocess 
BUTTON = 15 
GPIO.setmode(GPIO.BCM) 
GPIO.setup(BUTTON, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) 
while True: 
    if (GPIO.input(BUTTON)==True): 
     a = subprocess.Popen(['omxplayer', '-o', 'local', '*.mp3'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=True) 
     sleep(1) 
     a.stdin.write('q') 
    if (/exit process/): 
     #exit process 

現在、私はa.stdin.writeに(Q ')行のエラーが表示されます。次のように私のコードは、現在あります。

+0

'A'は' a.subprocess.Popen'のように、何ですか? – quamrana

+0

申し訳ありませんが、私は= subprocess.Popenを意味します。 –

+1

エラーメッセージはあなたが間違っていることを教えています。 – quamrana

答えて

-1

試してみてください。

a.send_signal(signal.SIGINT) 

またはその代わりa.stdin.write('q')ラインの

a.send_signal(signal.SIGTERM) 

。あなたがのpython3を使用していて、使用して固定することができますので、エラーがある

a.stdin.write(b'q') 
+0

downvotingの代わりに実際に何が起こったのか知らせてください。これにより、ユーザーは本当にこれを返信したい場合に備えて、あなたにさらなる助けを与えることができます。 – Esser420

+0

最初の2つのスニペットは、 'Popen'インスタンスで' terminate() 'または' kill() 'を呼び出すのではなく、 '' q'.encode( 'utf-8') 'は少し複雑です。 'bytes'リテラル(' b'q'')を使う方が簡単です。 – BlackJack

+0

ありがとうございます。 'encode( 'utf-8')は本当にあまりにも冗長です。 – Esser420

関連する問題