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

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

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

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

Python

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

Q&A

解決済

2回答

3785閲覧

Raspberry piで天気予報を読み上げたいです。pythonのエラーが出て実行できません。

退会済みユーザー

退会済みユーザー

総合スコア0

Raspberry Pi

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

Python

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

0グッド

0クリップ

投稿2016/09/04 05:00

###前提・実現したいこと
Raspberry pi で、Pythonを使って天気予報を読み上げるプログラムを作成しています。
シェルスクリプトを完成させて、いざターミナルでスクリプトを実行させようとしたところ、以下のエラーメッセージが出て実行できませんでした。。

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

Traceback (most recent call last); File "talk_weather.py", line 67, in <module> main() File "talk_weather.py", line 15, in main say_datetime() File "talk_weather.py", line 24, in say_datetime proc = sibprocess.Popen(shlex.split(text)) 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: [Error 2] No such file or directory

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

Python

1#!/usr/bin/env python 2# -*- coding:utf-8 -*- 3import shlex 4import subprocess 5from datetime import datetime 6import urllib2 7import json 8CMD_SAY = 'jsay' 9def main(): 10 say_datetime() 11 say_weather() 12 return 13def say_datetime(): 14 d = datetime.now() 15 text = '%s月%s日、%s時%s分%s秒' % (d.month, d.day, d.hour, d.minute, d.second) 16 text = CMD_SAY + ' ' + text 17 print text 18 proc = subprocess.Popen(shlex.split(text)) 19 proc.communicate() 20 return 21def say_weather(): 22 city = '130010'; # Tokyo 他の地域の方は、番号を変えてください。 23 json_url = 'http://weather.livedoor.com/forecast/webservice/json/v1' #API URL 24 weather_text = u'%sの天気は%sです。' 25 temperature_text = u'%sの予想最高気温、%s度、予想最低気温、%s度です。' 26 try: 27 r = urllib2.urlopen('%s?city=%s' % (json_url, city) ) 28 obj = json.loads( unicode(r.read()) ) 29 title = obj['title'] 30 forecasts = obj['forecasts'] 31 # TODAY 32 cast = forecasts[0] 33 temperature = cast['temperature'] 34 today_w_txt = weather_text % (cast['dateLabel'], cast['telop']) 35 today_t_txt = temperature_text % (cast['dateLabel'], temperature['max']['celsius'], temperature['min']['celsius']) 36 # TOMMOROW 37 cast = forecasts[1] 38 temperature = cast['temperature'] 39 tommorow_w_txt = weather_text % (cast['dateLabel'], cast['telop']) 40 # SAY 41 weather_str = title + ' ' + today_w_txt + ' ' + today_t_txt + ' ' + tommorow_w_txt 42 weather_str = weather_str.encode('utf-8') 43 text = '''%s '%s' ''' % (CMD_SAY, weather_str) 44 print text 45 proc = subprocess.Popen(shlex.split(text)) 46 proc.communicate() 47 finally: 48 r.close() 49 return 50### Execute 51if __name__ == "__main__": 52 main()

###試したこと
下記のサイトを参考に自分で手入力によりtalk_weather.pyを作成しましたが、ダメでしたので、下記サイトの管理人の方がサーバーにあげているファイルをwgetしましたが、それでも同じエラーメッセージが出て失敗しました。

Linuxでは改行コードに気を配らなければならない点をネットで知りましたが、サイト管理人の方のファイルは改行コードに問題はないのではと考えたので、他に問題があるのではと思っております。

"/usr/lib/python2.7/subprocess.py"にファイルがないとあるので、usr/lib/python2.7の中にsubprocess.pyがないので怒られているのかと思いましたが、きちんと存在していたので、何がエラーの原因か全くわからない状態です。

###補足情報(言語/FW/ツール等のバージョンなど)

Raspberry piもプログラミングも初心者のため、以下のサイトを参考にさせていただいています。

http://raspi.seesaa.net/article/415530289.html

このサイトでいう、talk_weather.pyが完成し、python talk_weather.pyを実行しようとした際に上記のエラーが出ている状態です。

Raspberry piはPi2 Model Bです。
Open Jtalkとhts_engineはインストール済みで、指定した言葉を話してくれるところまでは昨日出来ました。

昨日Raspberry piを使い始めたばかりでして、こちらで質問するのも初めてです。表現など足りない点があるかもしれませんが、アドバイスをいただけると幸いです。よろしくお願いします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

お二方とも、ご回答ありがとうございました。
今試してみたのですが、動きました!

エラーの原因は、そもそもの実行自体をhomeから行っていたことでした(汗)
talk_weather.pyのある場所に移動してから実行すると、うまくいきました!
初心者の初歩的なミスですみません・・・ありがとうございました!

投稿2016/09/08 13:58

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

mit0223

2016/09/08 14:21

カレントディレクトリの場所で結果が変わるということは PATH 環境変数の最初に . が含まれている( echo $PATH ってやると .:/usr/bin みたいになってる)ということでしょうか?もし、そうであれば、セキュリティ上の問題があってあまりおすすめできません。PATH環境変数から . を外して、CMS_SAY にフルパスでコマンドを指定することをおすすめします。 まあ、負け惜しみですので、きにしなくてもかまいません。解決済みにしてください。
guest

0

18行目の

python

1proc = subprocess.Popen(shlex.split(text))

でエラーになってると思われます。このときの Popen に渡してるコマンドはjsay 2016年3月21日10時23分14秒みたいな文字列です。しかし、この jsay コマンドが見つからないので、エラーになっているのではないでしょうか?
参考にされているサイトの最初に

事前に下記エントリーを参考に、open_jtalkを使った「jsay」コマンドを使えるようにしてください。

とありますが、これはOKですか? jsay コマンド単独では使えてますか?つまり、シェルのプロンプトからjsay 2016年3月21日10時23分14秒と打ち込んで正常に動作するでしょうか?

8行目に

Python

1CMD_SAY = 'jsay'

という行があって、これが実際に発音するときに呼び出すコマンドの名前になってます。
jsay ではなく、 jtalk.sh を呼び出したいのであれば、以下のように修正されてはいかがでしょうか?

Python

1CMD_SAY='/usr/local/bin/jtalk.sh’

投稿2016/09/04 05:43

編集2016/09/05 05:54
mit0223

総合スコア3401

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

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

退会済みユーザー

退会済みユーザー

2016/09/04 06:38

ご回答ありがとうございます! jsayに関しては別のサイトを参考にして作成済みです。(http://jellyware.jp/kurage/raspi/raspi_speech_synthesis.html)この方と同じような手順で作成したので、私が作成したのはjsayではなく、jtalk.shというファイルになっております。$ jtalk.sh こんにちは 等で音声が出力されることも確認済です。 jtalk.shの場所は/usr/local/bin/jtalk.shです。 私はjtalk.shの書き方もhttp://jellyware.jp/kurage/raspi/raspi_speech_synthesis.htmlの書き方に沿ったのですが、jsayで実行されているhttp://raspi.seesaa.net/article/415530289.htmlの方の書き方と違うのが原因でしょうか... 再びの質問になってしまい申し訳ありませんが、ご回答いただけますと幸いです!
退会済みユーザー

退会済みユーザー

2016/09/04 06:59

今、念のためj同じ文法でjsayファイルを作成しまし、talk_weather.pyにもコマンドはjsayに設定しましたが、以下のエラーが発生しました。パイソンのバージョンの問題でしょうか。 jsay9月4日15時58分 Traceback (most recent call last): File "talk_weather.py", line 67, in <module> main() File "talk_weather.py", line 15, in main say_datetime() File "talk_weather.py", line 24, in say_datetime proc = subprocess.Popen(shlex.split(text)) 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
退会済みユーザー

退会済みユーザー

2016/09/05 05:28

横からすみません。 引用されているtalk_weather.pyなら、jsay9月4日15時58分とは表示されないと思います。 ご自身で修正されていることと思いますが、 shlex.split(text)で分割され、subprocess.Popenで起動できるようにしないと動かないと思います。 jsay9月4日15時58分がコマンドと解釈され、そんなのないよと怒られているのではないでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問