質問: ### 実践力を身につけるPythonの教科書の「WEBアプリを作ってみよう」での質問です。 プログラミング言語を学習し始めようやく1か月経った初心者です。 今回はこの2点について質問させてもらいます。 1. Python3がコマンドライン上で実行できない 2. 簡易Webサーバのcgi-binが開けない** **質問1** ``` python3 -m http.server --cgi 8080 ``` これが実行できず四苦八苦しております。 これの代わりに ``` python -m http.server --cgi 8080 ``` で実行したところ何とか出来ました。 (今までもこれで実行して大体は行けました。) ここでもう間違っているとは思うのですが、 そもそも「python3」が実行できないというところでおかしいと思います。 そのため、[Python3.5.2]を一度アンインストールし[Python3.6.2]を新たに導入しました。 そして、再度、環境変数のパスも追加した上で何度も実行いたしましたが、うまくいかず途方にくれました。 これを解決するにはどうすればいいのだろうと思い、ここで質問して解決しようと思った次第です。 **質問2** 更に質問が続くようですが、{cgi-bin}のフォルダを作り 中に ``` [kakugen.py]←ファイル名 #!/usr/bin/env python #ヘッダ情報を出力 print("Content-Type: text/html; charset=utf-8") #ヘッダと本体データを区切る空行 print("") #本体データを出力 print("") print("千里の道も一歩より") print("") ``` というファイルを作りこれを開こうとしましたが そもそもその前の{cgi-bin}が開けませんでした。 以下がエラーメッセージです ### エラーメッセージ ``` [localhost:8080/cgi-bin]←アドレス Error response Error code: 403 Message: CGI script is not a plain file ('/cgi-bin/'). Error code explanation: HTTPStatus.FORBIDDEN - Request forbidden -- authorization will not help. ``` 他にも似たような質問があったのでこちら[]を参考にしてみたのですが 全く解決できませんでした。 ### 解決に向けての対応 この[cgi-bin]がいけないのかと思い、[cgi]に名前を変更したところ 今度は何とか開けましたが、kakugen.pyを開くと元のソースコードが文字化けした状態で出力されました。 そこで、エンコードを[Shift JIS]から[UTF-8]に変えてみたところ文字化けが治っただけでソースコードが依然として表示されます。 Python3.6.2がおかしいのではないかと疑い、環境変数を再度確認し、再起動もかけましたが何も解決できませんでした。 ### 補足情報(言語/FW/ツール等のバージョンなど) **現在の開発環境は** Windows10 Python3.6.2 Atom たまにSpyderを使います。 **不束なところがあると思いますが、ご協力お願いいたします。**
回答: コマンドの実行方法、よく自分で見つけれましたね。素晴らしいと思います。 さて、一つずつ回答していきます 質問1の回答 ======= WindowsでPython3系列のみインストールしたならば、`python` となってしまうのは仕方ないと思います。パスを張った先の実行ファイル名が`python`でしょうから。 余談 MacやLinuxでは2017年9月15日現在で標準で呼ばれるPythonは、プリインストールしているPythonのVer.2系です。 そのため、pythonの3系を明示的に呼び出すときは、大抵`python3`と明示的に打ってます。 /* 読み抜かしたところに注意があったのかもしれませんし、そもそも書いていないのなら、Mac・Linuxユーザーのみを想定した書籍なんでしょうね(遠い目) */ 質問2の回答 ======= Python3のソースコードの文字コードは、基本的にUTF-8です。そこに気づいたのは素晴らしいです。 また、`kakugen.py`の`#!` の行はUNIXシステムでスクリプトを直接実行する際に、何の言語の処理系で実行するかを明示する行ですので、今回Windowsのみでの動作を想定しているなら、特に必要ないです。(「シェバン」と言ったりします) また、Webブラウザでアクセスするアドレスが違います。フォルダ名とかは特に関係ないです。 今回の場合ですと`http://localhost:8080/cgi-bin/kakugen.py`と、ファイル名まで含めてアクセスするのが正しいはずです。 とりあえずまずはここまで試してみてください。 コメントによる追加質問はもちろん受け付けております。