質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

4304閲覧

Raspberry Piでpythonを実行したときに発生したsubprocessモジュールに関するエラー

ryou-jr2fyj

総合スコア8

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2017/01/03 11:42

###前提・実現したいこと
Raspberry Piとpythonを用いてインターネットラジオとFM放送を受信するプログラムを作成しています。「たのしい電子工作 Raspberry Pi 2で電子工作をはじめよう!」という本に沿って行っているのですが、以下のエラーメッセージが出力され動作しませんでした。

###発生している問題・エラーメッセージ

shout_radio4.py:76: SyntaxWarning: name 'disp_message1' is assigned to before global declaration global disp_message1 TOKYO FM Traceback (most recent call last): File "shout_radio4.py", line 69, in <module> TuneStation(st_info[0], st_info[1], st_info[2]) File "shout_radio4.py", line 55, in TuneStation subprocess.Popen(['/home/pi/fmradio_sub.sh', freq]) File "/usr/lib/python2.7/subprocess.py", line 710, in __init__ errread, errwrite) File "/usr/lib/python2.7/subprocess.py", line 1335, in _execute_child raise child_exception OSError: [Errno 2] No such file or directory

###該当のソースコード

python

1#!/usr/bin/python 2import subprocess 3import spidev 4import time 5import datetime 6import os 7 8stations = ( ('0', 'RADIO OFF', 'n'), 9 ('291180', 'Deep Techno fm', 'i' ), 10 ('499023', 'DeepHouse', 'i' ), 11 ('612055', 'WRCJ 90.9 - Classical Days Jazzy Nights', 'i' ), 12 ('60020', 'DRUM AND BASS LOUNGE', 'i' ), 13 ('61384', 'Deep Mix Moscow Radio', 'i' ), 14 ('99179829','A-JAZZ-FM-WEB', 'i' ), 15 ('80.0', 'TOKYO FM', 'f' ), 16 ('82.5', 'NHK FM', 'f' ), 17 ('81.3', 'J-WAVE', 'f' ) ) 18 ('0', 'RADIO OFF', 'n'), 19 ('0', 'RADIO OFF', 'n'), 20 ('0', 'RADIO OFF', 'n'), 21 ('0', 'RADIO OFF', 'n'), 22 ('0', 'RADIO OFF', 'n'), 23 ('0', 'RADIO OFF', 'n') ) 24 25# Open SIP Bus 26spi = spidev.SpiDev() 27spi.open(0,0) 28 29disp_message1 = "STOP" 30time.sleep(3) 31 32# Read ADC 33def ReadChannel(channel): 34 adc = spi.xfer2([1,(8+channel)<<4,0]) 35 data = ((adc[1]&3) << 8) + adc[2] 36 return data 37 38# Tune radio station 39def TuneStation(freq, name, mode): 40 global disp_message1 41 global disp_message2 42 43 d = datetime.datetime.today() 44 year2 = d.year - 2000 45 disp_message2 = '%2d/%02d/%02d %02d:%02d' % (year2, d.month, d.day, d.hour, d.minute) 46 disp_message1 = '%20s' % name 47 subprocess.Popen(['/home/pi/oledsp', disp_message2, disp_message1]) 48 49 if mode == 'n': 50 subprocess.Popen(['killall', 'mplayer']) 51 subprocess.Popen(['/home/pi/radiomute']) 52 elif mode == 'i': 53 subprocess.Popen(['/home/pi/shout_sub.sh', freq]) 54 else : 55 subprocess.Popen(['/home/pi/fmradio_sub.sh', freq]) 56 57delay = 0.1 58ad_channel=0 59last_data = 0 60tcount = 0 61 62while True: 63 data = ReadChannel(ad_channel) 64 data = data>>6 65 if last_data != data: 66 last_data = data 67 st_info = stations[data]; 68 print st_info[1] 69 TuneStation(st_info[0], st_info[1], st_info[2]) 70 71 # Delay for Next data 72 time.sleep(delay) 73 # Update Clock 74 tcount = tcount + 1 75 if tcount > 100: 76 global disp_message1 77 global disp_message2 78 79 d = datetime.datetime.today() 80 year2 = d.year - 2000 81 disp_message2 = '%2d/%02d/%02d %02d:%02d' % (year2, d.month, d.day, d.hour, d.minute) 82 subprocess.Popen(['/home/pi/oledsp', disp_message2, disp_message1]) 83 tcount = 0

###試したこと
最初は、手入力によりコードを書いたのですが実行できなかったため、書籍のサポートページ(http://www.shuwasystem.co.jp/support/7980html/4625.html)からダウンロードしたコードをコピー&ペーストして実行しましたが上記のエラーが発生し、実行できませんでした。このコードが05-shout_radio4.pyにあたります。
また、エラーに"No such file or directory"と表示されたので"/usr/lib/python2.7/subprocess.py"を確認しましたが、このファイル自体は存在していました。そのため、エラーの原因が不明です。

###補足情報(言語/FW/ツール等のバージョンなど)
Raspberry PiはPi3のModel Bを使用しています。また、pythonのバージョンを確かめたところ2.7.9でした。

最近、Raspberry Piおよびpythonを始めたばかりです。また、teratailを使用するのも初めてなので表現や質問の仕方に不足している点もあると思います。質問や表現も含めアドバイスをいただけると幸いです。よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

「subprocess.py」ではなく、「/home/pi/fmradio_sub.sh」が無いと言っているのではないですか?
その「fmradio_sub.sh」と言うファイルがどういうファイルかは知りませんが、おそらく本に書いてあるのではないでしょうか。

投稿2017/01/03 14:36

katsuko

総合スコア3462

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ryou-jr2fyj

2017/01/04 02:29

回答ありがとうございます。確かめてみたところ、やはり「/home/pi/fmradio_sub.sh」が無いと言っていたようです。原因は、windowsでコードを書いたため改行コードが\r\nで保存されていたからでした。sedコマンドを用いて改行コードを\nに直したら動きました。アドバイスありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問