お知らせ

  • 利用規約を守って投稿してください。また、よくある質問および投稿の手引きも参照してください。
  • メッセージの投稿にはアカウントが必要です。未登録の方は、ユーザ登録ページからアカウントを作成することができます。

#1 2018-01-23 09:03:23

ty21ky
メンバ
登録日: 2017-11-13

cgiでhtmlからPythonプログラムを起動すると、アプリを選択するダイアログ

cgiでhtmlからPythonプログラムを起動すると、アプリを選択するダイアログが表示されます。
ターミナル(端末)を選択しようとしても出てきません。

どうすればよいでしょうか。

https://www.jiriki.co.jp/blog/python/python-postmethod-form

上記のサイトのサンプルプログラムで実行しています。

オフライン

 

#2 2018-01-23 11:20:31

ry
メンバ
登録日: 2008-07-30

Re: cgiでhtmlからPythonプログラムを起動すると、アプリを選択するダイアログ

提示の Web ページだと「前回」があるようですが、「前回」の手順ではどうでしたか? (「前回」の Web ページは見つけられなかったので、内容不明だけど。)

オフライン

 

#3 2018-01-23 11:59:17

ty21ky
メンバ
登録日: 2017-11-13

Re: cgiでhtmlからPythonプログラムを起動すると、アプリを選択するダイアログ

ご返事ありがとうございます。

前回を参考してくれと書いていますが、「ローカルでCGIサーバーを起動させるスクリプト」のpythonのサンプルコードが書いてあっただけです。
https://www.jiriki.co.jp/blog/python/python-form

今回のページに書いてある通りやると、htmlから指定のpythonのプログラムを起動してpythonのプログラムからホームページを開こうとしていると思うのですが、form.pyを開くアプリを指定するダイアログが開くのです。

ターミナルから./form.pyで起動することは確認しているので、多分ターミナルを開くアプリを指定すれば良いと思うのですが、方法がわかりません。
ubuntuソフトウエアが開いてターミナルを指定してもターミナルを起動するかインストールするかしか出来ません。
Pythonを指定することも出来ません。
ターミナルを起動しても、form.pyを開くことはありませんでした。
自分でform.pyを開くとホーページで入力した内容を渡すことが出来ません。

オフライン

 

#4 2018-01-24 07:51:09

ry
メンバ
登録日: 2008-07-30

Re: cgiでhtmlからPythonプログラムを起動すると、アプリを選択するダイアログ

前回に相当する Web ページ (Pythonで作るもっとも簡単なフォームの受け渡し
) に「スクリプト本体は開発時は.pyで、サーバーに上げた段階で.cgiに変更しましょう。ローカルでは chmod 755 を与えておくことを忘れずに。」という記述があります。
ところが、今の Web ページ (PythonでPOSTメソッドを使いフォームからデータの習得をする) に、その記述がないのが間違いを生む基になっていると思います。
つまり、作成した form.py を form.cgi にリネームして、実行権限を付与 (chmod 755) しないといけないのではないでしょうか。

なお、CGIHTTPServer.CGIHTTPRequestHandler でググると拡張子は .py のままでもよさそうなので、実行権限が足りないだけの気もします。

オフライン

 

#5 2018-01-24 12:44:37

ty21ky
メンバ
登録日: 2017-11-13

Re: cgiでhtmlからPythonプログラムを起動すると、アプリを選択するダイアログ

ry さま ありがとうございます。

>ローカルでは chmod 755
私の環境では、*.txtファイルはchmod 777 でテンプレート フォルダーに入れていますので、ファイルを作成した段階でchmod 777になっています。

>作成した form.py を form.cgi にリネーム
これを実行したら、Firefoxに新しいタブが追加されて、form.cgiのプログラムのコードが表示されました。
Pythonのプログラムを実行したわけではなさそうなので、index.htmlのページで入力したデータはありません。

想像ですが、参考にしたサイトの内容が不足しているのか、バージョンの違いなのかではないかなと思います。

質問した内容は解決?したと思いますので、これで終了にしたいと思います。
cgiの方を少し調べてみます。

ありがとうございました。

オフライン

 

#6 2018-01-24 13:26:35

ty21ky
メンバ
登録日: 2017-11-13

Re: cgiでhtmlからPythonプログラムを起動すると、アプリを選択するダイアログ

ご報告
ひょっとしてGoogleクロームではどうなるか試してみました。
form.py 、 form.cgiの両方共、form.py 、 form.cgiのプログラムのコードが表示されました。

firefoxとは少しちがいますね。

オフライン

 

#7 2018-01-24 14:50:08

ry
メンバ
登録日: 2008-07-30

Re: cgiでhtmlからPythonプログラムを起動すると、アプリを選択するダイアログ

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 は後者の方法で実行するので、これで確認してみてください。

オフライン

 

#8 2018-01-25 09:28:06

ty21ky
メンバ
登録日: 2017-11-13

Re: cgiでhtmlからPythonプログラムを起動すると、アプリを選択するダイアログ

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 を記述しています。

オフライン

 

#9 2018-01-25 09:39:50

ty21ky
メンバ
登録日: 2017-11-13

Re: cgiでhtmlからPythonプログラムを起動すると、アプリを選択するダイアログ

(ローカルで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 -

オフライン

 

#10 2018-01-25 09:43:18

ty21ky
メンバ
登録日: 2017-11-13

Re: cgiでhtmlからPythonプログラムを起動すると、アプリを選択するダイアログ

#8では、
ファイル名をサイトに記述されている、form.htmlとしていますが、実際(#9)はindex.htmlでやっています。

オフライン

 

#11 2018-01-25 11:01:29

ty21ky
メンバ
登録日: 2017-11-13

Re: cgiでhtmlからPythonプログラムを起動すると、アプリを選択するダイアログ

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.
サーバーはこの操作をサポートしていません。

オフライン

 

#12 2018-01-25 14:44:08

ty21ky
メンバ
登録日: 2017-11-13

Re: cgiでhtmlからPythonプログラムを起動すると、アプリを選択するダイアログ

解決なのかどうかわかりませんが、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: qwe@gmail.com

とform.pyのプログラム通りの表示が出ました。

Python2.7の方はこのエラーが出ていたので、サポートされていないだけかも知れません??

Server does not support this operation.
サーバーはこの操作をサポートしていません。

オフライン

 

#13 2018-01-25 15:09:30

ty21ky
メンバ
登録日: 2017-11-13

Re: cgiでhtmlからPythonプログラムを起動すると、アプリを選択するダイアログ

他にpythonのプログラムでやってみましたが、全てちゃんと表示されました。

これで解決とさせていただきます。
ありがとうございました。

Python2.7の方は、他にもいろいろ問題がありますので使用しないようにします。
コメントでも漢字が記述されているとエラーになったりします。

オフライン

 

Board footer

Powered by FluxBB