Ubuntu日本語フォーラム
ログインしていません。
cgiでhtmlからPythonプログラムを起動すると、アプリを選択するダイアログが表示されます。
ターミナル(端末)を選択しようとしても出てきません。
どうすればよいでしょうか。
https://www.jiriki.co.jp/blog/python/python-postmethod-form
上記のサイトのサンプルプログラムで実行しています。
オフライン
提示の Web ページだと「前回」があるようですが、「前回」の手順ではどうでしたか? (「前回」の Web ページは見つけられなかったので、内容不明だけど。)
オフライン
ご返事ありがとうございます。
前回を参考してくれと書いていますが、「ローカルでCGIサーバーを起動させるスクリプト」のpythonのサンプルコードが書いてあっただけです。
https://www.jiriki.co.jp/blog/python/python-form
今回のページに書いてある通りやると、htmlから指定のpythonのプログラムを起動してpythonのプログラムからホームページを開こうとしていると思うのですが、form.pyを開くアプリを指定するダイアログが開くのです。
ターミナルから./form.pyで起動することは確認しているので、多分ターミナルを開くアプリを指定すれば良いと思うのですが、方法がわかりません。
ubuntuソフトウエアが開いてターミナルを指定してもターミナルを起動するかインストールするかしか出来ません。
Pythonを指定することも出来ません。
ターミナルを起動しても、form.pyを開くことはありませんでした。
自分でform.pyを開くとホーページで入力した内容を渡すことが出来ません。
オフライン
前回に相当する Web ページ (Pythonで作るもっとも簡単なフォームの受け渡し
) に「スクリプト本体は開発時は.pyで、サーバーに上げた段階で.cgiに変更しましょう。ローカルでは chmod 755 を与えておくことを忘れずに。」という記述があります。
ところが、今の Web ページ (PythonでPOSTメソッドを使いフォームからデータの習得をする) に、その記述がないのが間違いを生む基になっていると思います。
つまり、作成した form.py を form.cgi にリネームして、実行権限を付与 (chmod 755) しないといけないのではないでしょうか。
なお、CGIHTTPServer.CGIHTTPRequestHandler でググると拡張子は .py のままでもよさそうなので、実行権限が足りないだけの気もします。
オフライン
ry さま ありがとうございます。
>ローカルでは chmod 755
私の環境では、*.txtファイルはchmod 777 でテンプレート フォルダーに入れていますので、ファイルを作成した段階でchmod 777になっています。
>作成した form.py を form.cgi にリネーム
これを実行したら、Firefoxに新しいタブが追加されて、form.cgiのプログラムのコードが表示されました。
Pythonのプログラムを実行したわけではなさそうなので、index.htmlのページで入力したデータはありません。
想像ですが、参考にしたサイトの内容が不足しているのか、バージョンの違いなのかではないかなと思います。
質問した内容は解決?したと思いますので、これで終了にしたいと思います。
cgiの方を少し調べてみます。
ありがとうございました。
オフライン
ご報告
ひょっとしてGoogleクロームではどうなるか試してみました。
form.py 、 form.cgiの両方共、form.py 、 form.cgiのプログラムのコードが表示されました。
firefoxとは少しちがいますね。
オフライン
CGI は、Web サーバーが Web クライアント (Web ブラウザー) からの HTTP リクエストを受けて、指定された CGI のプログラムをサーバー上で動かし、その出力を Web クライアントに送信する仕組みです。
今回の場合でいえば、以下のようになります。
Web サーバー =サーバーで動かしている cgiserver.py (Python の CGIHTTPServer モジュール)
CGI のプログラム =サーバーに保存した form.py など
Web ブラウザが Firefox であろうと Chrome であろうと、サーバーで CGI プログラムを動かす部分には変わりありません。
form.pyを開くアプリを指定するダイアログが開いたり、form.py のプログラム コードが表示されたりするということは、Web サーバーはそれを CGI プログラムとして動作せず、html ファイル同様にファイルの中身を Web クライアントに送信しているということです。
ダイアログが開くか、そのまま表示するかは、Web ブラウザ毎の動作ですが、今回は気にするほどのことではありません。
Web サーバーが form.py を実行せず、中身をそのまま送信してしまうのは、たいていは Web サーバー (CGIHTTPServer モジュール) で from.py を実行できなかったときです。
「ターミナルから./form.pyで起動することは確認している」とありますが、確認に python ./form.py ではなく ./form.py で実行してみましたか。
CGI は後者の方法で実行するので、これで確認してみてください。
オフライン
ry さま ありがとうございます。
ローカルでCGIサーバーを起動させるスクリプトを実行してから、
Web ページ (PythonでPOSTメソッドを使いフォームからデータの習得をする) のform.htmlをhttp://localhost:8000/form.htmlで開くのではなく、
ファイルマネージャーからform.htmlをそのまま開いていました。(file:///・・・・/form.html)
http://localhost:8000/form.htmlで開くと、(form.cgiでも同じ)
http://localhost:8000/cgi-bin/form.py のタブが開いてまた別のエラーがでました。現在このエラーを調べています。
Error response
Error code 501.
Message: Can only POST to CGI scripts.
Error code explanation: 501 = Server does not support this operation.
ご報告まで。
>確認に python ./form.py ではなく ./form.py で実行してみましたか。
はい、確認しています。
#! /usr/bin/python2.7 を記述しています。
オフライン
(ローカルでCGIサーバーを起動させるスクリプトを実行)のメッセージです。
$ ./cgiserver.pyServing HTTP on 0.0.0.0 port 8000 ...
127.0.0.1 - - [25/Jan/2018 09:01:48] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [25/Jan/2018 09:01:48] code 404, message File not found
127.0.0.1 - - [25/Jan/2018 09:01:48] "GET /favicon.ico HTTP/1.1" 404 -
127.0.0.1 - - [25/Jan/2018 09:02:26] code 501, message Can only POST to CGI scripts
127.0.0.1 - - [25/Jan/2018 09:02:26] "POST /cgi-bin/form.py HTTP/1.1" 501 -
127.0.0.1 - - [25/Jan/2018 09:02:38] code 501, message Can only POST to CGI scripts
127.0.0.1 - - [25/Jan/2018 09:02:38] "POST /cgi-bin/form.py HTTP/1.1" 501 -
127.0.0.1 - - [25/Jan/2018 09:11:18] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [25/Jan/2018 09:11:19] code 404, message File not found
127.0.0.1 - - [25/Jan/2018 09:11:19] "GET /favicon.ico HTTP/1.1" 404 -
127.0.0.1 - - [25/Jan/2018 09:11:34] code 501, message Can only POST to CGI scripts
127.0.0.1 - - [25/Jan/2018 09:11:34] "POST /cgi-bin/form.py HTTP/1.1" 501 -
127.0.0.1 - - [25/Jan/2018 09:25:07] "GET /index1.html HTTP/1.1" 200 -
127.0.0.1 - - [25/Jan/2018 09:25:15] code 501, message Can only POST to CGI scripts
127.0.0.1 - - [25/Jan/2018 09:25:15] "POST /cgi-bin/form.cgi HTTP/1.1" 501 -
オフライン
#8では、
ファイル名をサイトに記述されている、form.htmlとしていますが、実際(#9)はindex.htmlでやっています。
オフライン
ry さま いろいろ教えていただきありがとうございました。
もっと基本的なところから勉強します。
基本が出来てないので、調べても書いてあることが理解出来ないので。
いろいろ教えていただので、ちょっとは進んだような気がするのですが、先も長いような気がします。
何かわかったことがあれば報告させていただきます。
>メッセージ:CGIスクリプトにのみPOSTできます。
一応、拡張子を変更したform.cgiの方もやってみたのですが、結果は同じでした。まだ何か問題が・・・
Error code 501.
do_POST()
このメソッドは、CGI スクリプトでのみ許されている 'POST' 型の HTTP 要求に対するサービスを行います。CGI でない url に対して POST を試みた場合、出力は Error 501, "Can only POST to CGI scripts" になります。
Message: Can only POST to CGI scripts.
メッセージ:CGIスクリプトにのみPOSTできます。
Server does not support this operation.
サーバーはこの操作をサポートしていません。
オフライン
解決なのかどうかわかりませんが、Python3の方で実行すると正常に動作しました。
最初は単純に#! /usr/bin/python3でできるかと思いましたがエラーが出て、ネットで調べたら、
$ python3 -m http.server --cgi
で同じことができるとありましたので、これでindex.htmlを「http://localhost:8000/index.html」で開き、データを入力した所
http://localhost:8000/cgi-bin/form.py
PRINT
name: qwertry mail: [email protected]
とform.pyのプログラム通りの表示が出ました。
Python2.7の方はこのエラーが出ていたので、サポートされていないだけかも知れません??
Server does not support this operation.
サーバーはこの操作をサポートしていません。
オフライン
他にpythonのプログラムでやってみましたが、全てちゃんと表示されました。
これで解決とさせていただきます。
ありがとうございました。
Python2.7の方は、他にもいろいろ問題がありますので使用しないようにします。
コメントでも漢字が記述されているとエラーになったりします。
オフライン