🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Bottle

Bottleは、PythonのWebサーバです。1つのPythonファイルで構成されており、非常に軽量。Web APIの作成や導入が簡単で、DjangoやFlaskに比べ使いやすくシンプルなことが特徴です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

8329閲覧

pythonのスクリプトをバッチで実行できない

tonk

総合スコア22

Bottle

Bottleは、PythonのWebサーバです。1つのPythonファイルで構成されており、非常に軽量。Web APIの作成や導入が簡単で、DjangoやFlaskに比べ使いやすくシンプルなことが特徴です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/11/15 08:13

やりたいこと

pythonのスクリプトファイルをバッチで起動してwebアプリを実行したい。

環境

python3.7
bottle

わからないこと

よく分からないのが、コマンドでは実行できるのですが、同様の内容を記述したバッチでは実行できないのです。
エラーではテンプレートが見つからないようなことをいわれるのですが。
ご教示いただけると助かります。どうぞよろしくお願いいたします。

#バッチ C:\Users*****\AppData\Local\Programs\Python\Python37-32\python.exe C:\Users*****\py\svr.py
#エラーメッセージ Error: 500 Internal Server Error Sorry, the requested URL 'http://localhost:8080/diff' caused an error: Template 'diff' not found.

python

1from bottle import route, run, template, request 2import datetime 3 4@route("/diff") 5def diff(): 6 return template("diff",tp_d1_01="_____",tp_d2_01="_____",tp_rt_01="__",tp_text_01="__",tp_d1_01_ad="",tp_d2_01_ad="",\ 7 tp_d1_02="_____",tp_d2_02="_____",tp_rt_02="__",tp_text_02="__",tp_d1_02_ad="",tp_d2_02_ad="",\ 8 tp_d1_03="_____",tp_d2_03="_____",tp_rt_03="__",tp_text_03="__",tp_d1_03_ad="",tp_d2_03_ad="",\ 9 tp_d1_04="_____",tp_d2_04="_____",tp_rt_04="__",tp_text_04="__",tp_d1_04_ad="",tp_d2_04_ad="",\ 10 tp_d1_05="_____",tp_d2_05="_____",tp_rt_05="__",tp_text_05="__",tp_d1_05_ad="",tp_d2_05_ad="",\ 11 total="") 12 13era = { '西暦':0, '昭和':1925, '平成':1988, '令和':2018 } 14@route("/diff",method="POST") 15 16def diff(): 17 try: 18 #期間1################################################################################# 19 era1_01 = request.forms.nengo_start_01 20 era2_01 = request.forms.nengo_end_01 21 d1_str_01 = request.forms.start_01 22 d2_str_01 = request.forms.end_01 23 rt_str_01 = request.forms.rate_01 24 25 if era1_01 in era.keys(): 26 yymmdd = d1_str_01.split('/') 27 d1_01 = datetime.date(era[era1_01] + int(yymmdd[0]), int(yymmdd[1]), int(yymmdd[2])) 28 else: 29 d1_01 = None 30 31 if era2_01 in era.keys(): 32 yymmdd = d2_str_01.split('/') 33 d2_01 = datetime.date(era[era2_01] + int(yymmdd[0]), int(yymmdd[1]), int(yymmdd[2])) 34 else: 35 d2_01 = None 36 d3_01 = d2_01 + datetime.timedelta(days=1) 37 rt_01 = float(rt_str_01) 38 years_01 = ((d3_01.year - d1_01.year)*12 + d3_01.month - d1_01.month)*rt_01*100//12/100 39 40 #期間2################################################################################# 41 era1_02 = request.forms.nengo_start_02 42 era2_02 = request.forms.nengo_end_02 43 d1_str_02 = request.forms.start_02 44 d2_str_02 = request.forms.end_02 45 rt_str_02 = request.forms.rate_02 46 47 if era1_02 in era.keys(): 48 yymmdd = d1_str_02.split('/') 49 d1_02 = datetime.date(era[era1_02] + int(yymmdd[0]), int(yymmdd[1]), int(yymmdd[2])) 50 else: 51 d1_02 = None 52 53 if era2_02 in era.keys(): 54 yymmdd = d2_str_02.split('/') 55 d2_02 = datetime.date(era[era2_02] + int(yymmdd[0]), int(yymmdd[1]), int(yymmdd[2])) 56 else: 57 d2_02 = None 58 d3_02 = d2_02 + datetime.timedelta(days=1) 59 rt_02 = float(rt_str_02) 60 years_02 = ((d3_02.year - d1_02.year)*12 + d3_02.month - d1_02.month)*rt_02*100//12/100 61 62 #期間3################################################################################# 63 era1_03 = request.forms.nengo_start_03 64 era2_03 = request.forms.nengo_end_03 65 d1_str_03 = request.forms.start_03 66 d2_str_03 = request.forms.end_03 67 rt_str_03 = request.forms.rate_03 68 69 if era1_03 in era.keys(): 70 yymmdd = d1_str_03.split('/') 71 d1_03 = datetime.date(era[era1_03] + int(yymmdd[0]), int(yymmdd[1]), int(yymmdd[2])) 72 else: 73 d1_03 = None 74 75 if era2_03 in era.keys(): 76 yymmdd = d2_str_03.split('/') 77 d2_03 = datetime.date(era[era2_03] + int(yymmdd[0]), int(yymmdd[1]), int(yymmdd[2])) 78 else: 79 d2_03 = None 80 d3_03 = d2_03 + datetime.timedelta(days=1) 81 rt_03 = float(rt_str_03) 82 years_03 = ((d3_03.year - d1_03.year)*12 + d3_03.month - d1_03.month)*rt_03*100//12/100 83 84 #期間4################################################################################# 85 era1_04 = request.forms.nengo_start_04 86 era2_04 = request.forms.nengo_end_04 87 d1_str_04 = request.forms.start_04 88 d2_str_04 = request.forms.end_04 89 rt_str_04 = request.forms.rate_04 90 91 if era1_04 in era.keys(): 92 yymmdd = d1_str_04.split('/') 93 d1_04 = datetime.date(era[era1_04] + int(yymmdd[0]), int(yymmdd[1]), int(yymmdd[2])) 94 else: 95 d1_04 = None 96 97 if era2_04 in era.keys(): 98 yymmdd = d2_str_04.split('/') 99 d2_04 = datetime.date(era[era2_04] + int(yymmdd[0]), int(yymmdd[1]), int(yymmdd[2])) 100 else: 101 d2_04 = None 102 d3_04 = d2_04 + datetime.timedelta(days=1) 103 rt_04 = float(rt_str_04) 104 years_04 = ((d3_04.year - d1_04.year)*12 + d3_04.month - d1_04.month)*rt_04*100//12/100 105 106 #期間5################################################################################# 107 era1_05 = request.forms.nengo_start_05 108 era2_05 = request.forms.nengo_end_05 109 d1_str_05 = request.forms.start_05 110 d2_str_05 = request.forms.end_05 111 rt_str_05 = request.forms.rate_05 112 113 if era1_05 in era.keys(): 114 yymmdd = d1_str_05.split('/') 115 d1_05 = datetime.date(era[era1_05] + int(yymmdd[0]), int(yymmdd[1]), int(yymmdd[2])) 116 else: 117 d1_05 = None 118 119 if era2_05 in era.keys(): 120 yymmdd = d2_str_05.split('/') 121 d2_05 = datetime.date(era[era2_05] + int(yymmdd[0]), int(yymmdd[1]), int(yymmdd[2])) 122 else: 123 d2_05 = None 124 d3_05 = d2_05 + datetime.timedelta(days=1) 125 rt_05 = float(rt_str_05) 126 years_05 = ((d3_05.year - d1_05.year)*12 + d3_05.month - d1_05.month)*rt_05*100//12/100 127 128 129 return template("diff",tp_d1_01=era1_01+d1_str_01,tp_d2_01=era2_01+d2_str_01,tp_rt_01=rt_01,tp_text_01=years_01,tp_d1_01_ad=d1_01,tp_d2_01_ad=d2_01,\ 130 tp_d1_02=era1_02+d1_str_02,tp_d2_02=era2_02+d2_str_02,tp_rt_02=rt_02,tp_text_02=years_02,tp_d1_02_ad=d1_02,tp_d2_02_ad=d2_02,\ 131 tp_d1_03=era1_03+d1_str_03,tp_d2_03=era2_03+d2_str_03,tp_rt_03=rt_03,tp_text_03=years_03,tp_d1_03_ad=d1_03,tp_d2_03_ad=d2_03,\ 132 tp_d1_04=era1_04+d1_str_04,tp_d2_04=era2_04+d2_str_04,tp_rt_04=rt_04,tp_text_04=years_04,tp_d1_04_ad=d1_04,tp_d2_04_ad=d2_04,\ 133 tp_d1_05=era1_05+d1_str_05,tp_d2_05=era2_05+d2_str_05,tp_rt_05=rt_05,tp_text_05=years_05,tp_d1_05_ad=d1_05,tp_d2_05_ad=d2_05,\ 134 total = years_01+years_02+years_03+years_04+years_05) 135 136 137 except: 138 return template("diff",tp_d1_01=era1_01+d1_str_01,tp_d2_01=era2_01+d2_str_01,tp_rt_01=rt_01,tp_text_01=years_01,tp_d1_01_ad=d1_01,tp_d2_01_ad=d2_01,\ 139 tp_d1_02=era1_02+d1_str_02,tp_d2_02=era2_02+d2_str_02,tp_rt_02=rt_02,tp_text_02=years_02,tp_d1_02_ad=d1_02,tp_d2_02_ad=d2_02,\ 140 tp_d1_03=era1_03+d1_str_03,tp_d2_03=era2_03+d2_str_03,tp_rt_03=rt_03,tp_text_03=years_03,tp_d1_03_ad=d1_03,tp_d2_03_ad=d2_03,\ 141 tp_d1_04=era1_04+d1_str_04,tp_d2_04=era2_04+d2_str_04,tp_rt_04=rt_04,tp_text_04=years_04,tp_d1_04_ad=d1_04,tp_d2_04_ad=d2_04,\ 142 tp_d1_05=era1_05+d1_str_05,tp_d2_05=era2_05+d2_str_05,tp_rt_05=rt_05,tp_text_05=years_05,tp_d1_05_ad=d1_05,tp_d2_05_ad=d2_05,\ 143 total = years_01+years_02+years_03+years_04+years_05) 144 145run(host="localhost",port=8080,debug=True) 146

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

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

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

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

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

dodox86

2019/11/15 09:12

色々不明点がありますので、以下、教えてください。 Q1. 手入力でコマンドで実行するとき、バッチファイルに書いてある内容と一字一句同じで、正しく動作しますか。 Q2. 手入力でコマンドを実行して成功するときのカレントディレクトリはどこでしょうか。(コマンドプロンプト上で CD と打った時の表示内容です) Q3. バッチファイルはどこに置いてありますか。 Q4. バッチファイルを実行するとき、どのように実行していますか。ダブルクリックでしょうか。
tonk

2019/11/15 21:00

ご返答ありがとうございます。以下追記情報となります。 Q1、Q2.すみません、違います。コマンドで入力する場合はスクリプトファイルの置いてあるディレクトリまで移動の上、python svr.pyと入力してます。 Q3.スクリプトファイルのディレクトリにバッチ用のフォルダを作成し、その中に置いてあります。 Q4.はい、ダブルクリックです。 恐れ入ります。よろしくお願いいたします。
guest

回答1

0

ベストアンサー

バッチファイルが存在するディレクトリとスクリプト(およびテンプレートファイル)が存在するディレクトリが違う状況下で、バッチファイルをダブルクリックして実行すると、バッチファイルの存在するディレクトリがカレントディレクトリになってしまうのがエラーの原因です。

バッチファイルの中で、スクリプトを実行する前にスクリプトの存在するディレクトリへ CD <スクリプトが存在するディレクトリ>すればよいです。

BAT

1rem スクリプトの存在するディレクトリへ cd してから起動する。 2cd C:\Users*****\py 3 4C:\Users*****\AppData\Local\Programs\Python\Python37-32\python.exe C:\Users*****\py\svr.py

投稿2019/11/16 02:23

dodox86

総合スコア9256

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

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

tonk

2019/11/16 03:35

度々のご回答ありがとうございます。 ご指導通りの記述で無事起動できました。 ありがとうございました。
dodox86

2019/11/16 03:53

今思いましたが、スクリプトのディレクトリへCDしているのだから、 python実行のときに省いても良いかもしれません。お好きな方をお選びください。 cd <スクリプトのディレクトリ> <pytho.exeのディレクトリ>python.exe svr.py
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問