Pythonでarecord -lの値を取得して,プログラムに与える方法
- 2022.03.24
- IT
表題通り。
Raspberry PiでPythonを利用して、マイクを複数台使うプログラムを作ったときに毎回カード番号をarecordで取得していました。
それを自動化したいと思ったので作りました。
コードと実行結果
下記がコードです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
import subprocess import re def run_program(): list_up_mic_cmd = ['arecord','-l'] result =str(subprocess.check_output(list_up_mic_cmd)) print(result) key = "card " card_positions = re.finditer(key,result) card_num_list = [] for card_position in card_positions: card_num_list.append(re.sub(r"\D", "", result[card_position.start()+len(key)])) print(card_num_list) if __name__ == '__main__': run_program() |
実行結果
1 2 |
[3] [3,4] |
解説
コマンドラインの入力ライブラリはsysではなく、Subprocessにしました。
パッとみたところ、コマンドライン上の結果が受け取りやすかったからです。
コマンドは、1つ1つをリスト型にします。
1 |
cmd = ['arecord -l'] |
このようにすると、”arecord -l”というコマンドとして捉えられるのでNGです。
このプログラムを、起動時に実行するようにすれば、機器を差し替えても使えると思います。