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

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

ただいまの
回答率

90.60%

  • Python

    7495questions

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

  • Raspberry Pi

    761questions

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

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

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 719

ryou-jr2fyj

score 2

前提・実現したいこと

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

該当のソースコード

#!/usr/bin/python
import subprocess
import spidev
import time
import datetime
import os

stations = ( ('0', 'RADIO OFF', 'n'),
             ('291180', 'Deep Techno fm', 'i' ),
             ('499023', 'DeepHouse', 'i' ),
             ('612055', 'WRCJ 90.9 - Classical Days Jazzy Nights', 'i' ),
             ('60020',  'DRUM AND BASS LOUNGE', 'i' ),
             ('61384',  'Deep Mix Moscow Radio', 'i' ),
             ('99179829','A-JAZZ-FM-WEB', 'i' ),
             ('80.0', 'TOKYO FM', 'f' ),
             ('82.5', 'NHK FM', 'f' ),
             ('81.3', 'J-WAVE', 'f' ) )
             ('0', 'RADIO OFF', 'n'),
             ('0', 'RADIO OFF', 'n'),
             ('0', 'RADIO OFF', 'n'),
             ('0', 'RADIO OFF', 'n'),
             ('0', 'RADIO OFF', 'n'),
             ('0', 'RADIO OFF', 'n') )

# Open SIP Bus
spi = spidev.SpiDev()
spi.open(0,0)

disp_message1 = "STOP"
time.sleep(3)

# Read ADC
def ReadChannel(channel):
  adc = spi.xfer2([1,(8+channel)<<4,0])
  data = ((adc[1]&3) << 8) + adc[2]
  return data

# Tune radio station
def TuneStation(freq, name, mode):
  global disp_message1
  global disp_message2

  d = datetime.datetime.today()
  year2 = d.year - 2000
  disp_message2 =  '%2d/%02d/%02d %02d:%02d' % (year2, d.month, d.day, d.hour, d.minute)
  disp_message1 = '%20s' % name
  subprocess.Popen(['/home/pi/oledsp', disp_message2, disp_message1])

  if mode == 'n':
    subprocess.Popen(['killall', 'mplayer'])
    subprocess.Popen(['/home/pi/radiomute'])
  elif mode == 'i':
    subprocess.Popen(['/home/pi/shout_sub.sh', freq])
  else :
    subprocess.Popen(['/home/pi/fmradio_sub.sh', freq])

delay = 0.1
ad_channel=0
last_data = 0
tcount = 0

while True:
  data = ReadChannel(ad_channel)
  data = data>>6
  if last_data != data:
      last_data = data
      st_info = stations[data];
      print st_info[1]
      TuneStation(st_info[0], st_info[1], st_info[2])

  # Delay for Next data
  time.sleep(delay)
  # Update Clock
  tcount = tcount + 1
  if tcount > 100:
    global disp_message1
    global disp_message2

    d = datetime.datetime.today()
    year2 = d.year - 2000
    disp_message2 =  '%2d/%02d/%02d %02d:%02d' % (year2, d.month, d.day, d.hour, d.minute)
    subprocess.Popen(['/home/pi/oledsp', disp_message2, disp_message1])
    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を使用するのも初めてなので表現や質問の仕方に不足している点もあると思います。質問や表現も含めアドバイスをいただけると幸いです。よろしくお願いいたします。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/01/04 11:29

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

    キャンセル

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

  • ただいまの回答率 90.60%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Python

    7495questions

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

  • Raspberry Pi

    761questions

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