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

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

ただいまの
回答率

89.64%

コマンドプロンプト内で起動する、python.exe について

解決済

回答 4

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 5,698

Surface-Yuki

score 30

コマンドプロンプトについて質問です。

使用環境
windwos 10
Python 3.6

Pythonファイルをterminalで起動しなさいと指示されました。
私はwindowsを使っているのでコマンドプロンプトで起動しようと思うのですが、

コマンドプロンプト 上でpythonと入力すると
Python 3.6.0 (v3.6.0:41df79263a11, Dec 23 2016, 08:06:12) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
という文章が表示されます。

環境変数のPATHを調べてみるとC:\Users\Yuki\AppData\Local\Programs\Python\Python36\
と指定されているのでPython36内にあるPython.exeというフォイルを起動していることは理解しています。

Python.exeを起動することにより、コマンドプロンプト上では何が起きているでしょうか?

"C:\Users\Yuki>"という表示は消え、動いたはずの"cd","dir","ipconfig"など全てのコマンドが使用できなくなっています。
代わりにコードを打ち、Enterを押すとすぐに結果が出る画面になります。

例えば、デスクトップ上にruler.py というファイルがあるとします。
コマンドプロンプト上でcdコマンドを使い、ruler.py ファイルがあるディレクトリへ移動して、
ruler.pyと入力するとその結果が表示されます。

では、コマンドプロンプトでpython.exeを起動後の画面で、パイソンファイルを起動するにはどうすればいいんでしょうか?
[質問点]そもそも、python.exeという起動ファイルはどのような役割があるのですか?

回答よろしくお願いします。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

checkベストアンサー

+6

やはり、REPL の機能しか使えないのですが、なぜでしょうか?

そのとおり、pythonとだけで起動するとREPLモードで起動します。以降は、終了するまでコマンドプロンプトのコマンドは受け付けません。

3~6のようにファイル名を並べるコマンドはどのように処理されているのでしょうか?

1つ目が起動するプログラムファイルで、2つ目以降が引数(argument)です。引数をどう解釈するかは1つ目に書いたプログラムの仕様次第です。pythonの場合に引数がどういう意味を持つかはpython --helpで見てください。

もしそうなれば、なぜ1,2は起動するのですか? 

Windowsの場合、
コマンドプロンプトで、assoc .py や ftype Python.File で表示される情報(実際にはレジストリの中)に従って、exeファイルが起動されます。
手元の環境だと、Python.File="C:\Windows\py.exe" "%L" %*となっています。
%Lは、元のファイル名に、%* は残りの引数に置き換わりますので、hello.pyと打つと"C:\Windows\py.exe" "hello.py"が実行されます。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/02/10 21:37 編集

    小さな疑問点が一つ生まれました。

    理解すれば、するほど疑問点が増えて楽しいです。
    本当に回答して下さり、ありがとうございます。
    勉強になります。

    C:\Windows\py.exeと

    C:\Users\Yuki\AppData\Local\Programs\Python\Python36にあるpython.exe は別の機能を持っているにですか?

    2つともpythonのインタラクティブシェルが起動します。(コマンドプロンプトでpythonと入力した状態)

    キャンセル

  • 2017/02/10 22:00

    横から失礼します。
    >python.exe の後のhelloは拡張子がないのでファイルとして認められず開かない。
    違います。~/helloというファイルが存在しないだけです。拡張子の有無は関係ありません。

    キャンセル

  • 2017/02/10 22:22

    > 以下、ファイルの起動順序をを整理してみました。

    1と2は合ってます。
    3が間違ってます。「カレントディレクトリに hello というファイルが無いので、エラーになる」です。
    copy hello.py hello
    python hello
    で実行できるはずです。

    > windowsファイルの直下にはpy.exeというファイルは存在しません。
    手元の環境にはあります。
    また、起動するなら存在すると言うことです。

    > 別の機能を持っているにですか?
    py.exe から python.exe が起動されます。py.exe は「Pythonランチャー」というようです。
    参考: http://docs.python.jp/3.5/using/windows.html

    キャンセル

+5

Pythonを実行するpython(Windowsの場合はpython.exeだが、コマンドプロンプト上では.exeは省略可能)には主に二つの役割があります。

  1. Pythonのインタプリンタ
    Pythonで書かれたスクリプトファイルを指定して、Pythonとしてその内容を実行する。
    python ファイル名という形で実行する。
  2. PythonのREPL
    REPL機能を提供する。
    ファイルを指定せずpythonのみで実行する。

REPLというのは対話型評価環境と言われるものです。そこではPythonのコードを書くことができ、一行またはブロック一つを書く毎に即座に実行され、その評価結果が表示されます。例えば次のようにです。

~ λ python3
Python 3.6.0 (default, Dec 24 2016, 08:01:42)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> a = 1
>>> b = 2
>>> a + b
3
>>>

※ macOS上で出したので最初の方がちょっと違いますが、基本的にはOSに関係無くできることは同じです。

代入は何も返さないため結果はありませんが、a + bの結果は3なので、3を表示しています。

このREPLはPythonの動きをすこし確認したいと言ったときに、わざわざスクリプトファイルを作るまでも無いような場合に便利です。他にも高機能電卓としても使用できます。詳しい動作は Python 3.5.2 ドキュメント 2.1.2. 対話モード を参考にしてみてください。

他の言語(Ruby、Scala、Haskell等)でも標準でREPLが用意されている場合があります。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/02/10 06:55

    なお、これはWindowsの機能であって、Pythonの機能ではありません。".exe"のほかに".bat"や".cmd"なども勝手に補完します。コマンドプロンプト上で"notepad"と打つとメモ帳が起動しますが、実体が"notepad.exe"であるというのと同じです。コマンドプロンプト以外でも「名前を指定して実行」などでも同じように動きます。

    キャンセル

  • 2017/02/10 09:56

    丁寧に回答ありがとうございます。

    path pathextについては理解しています。

    ~現在の環境~
    Python3.6
    デスクトップ上にhello.py

    「ここから質問1」
    初めの回答にあった『Pythonのインタプリンタ :Pythonで書かれたスクリプトファイルを指定して、Pythonとしてその内容を実行する。 python ファイル名という形で実行する。』
    というのが理解出来ません。

    コマンドプロンプト上で、python.exe 起動後にhelloまたはhello.pyと入力しても
    以下のようなエラーが表示されます。
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    NameError: name 'hello' is not defined

    やはり、REPL の機能しか使えないのですが、なぜでしょうか?

    「ここまで質問」


    ここから少し自分なりに整理してみます。

    コマンドプロンプト上でデスクトップ上にあるhello.pyを起動させる。
    c:\users\yuki\desktopディレクトリでのコマンド入力

    1 hello        〇
    2 hello.py      〇
    3 python hello   ×
    4 python hello.py   〇
    5 python.exe hello  ×
    6 python.exe hello.py 〇

    上記のような結果になりました。

    つまり、初めに入力された文字に対してはPATHEXが機能し、拡張子を探す。
    なので、3と5は helloに対する拡張子が加えられず、"hello" というファイルを探した結果以下のようなエラーが出た。
    python.exe: can't open file 'hello': [Errno 2] No such file or directory


    「ここから質問2」
    3~6のようにファイル名を並べるコマンドはどのように処理されているのでしょうか?
    1つ目で2つ目を起動(pythonでhelloを起動)という意味ですか?
    もしそうなれば、なぜ1,2は起動するのですか?
    「ここまで質問」


    キャンセル

  • 2017/02/10 22:32

    REPLの中で書くことができるのは「Pythonのコード」です。Pythonのスクリプトファイルのファイル名ではありません。"hello"はPythonのコードですか?Pythonのスクリプトファイルに"hello"と書いて動きますか?

    キャンセル

0

ctrl + z を押すと、戻ってくると思います。

python pyファイル名

で実行できませんか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/02/10 06:26

    ”ctrl + z を押すと、戻ってくると思います。” とはどういう意味ですか?
    コマンドプロンプト上でctl+zを教えても何も起きませんが?

    キャンセル

  • 2017/02/10 06:37

    ctl +z の意味がわかりました。
    python.exeを終了するコマンドですね。quit()と同じ

    python.exeを起動する前の状態(コマンドプロンプトを開いただけ)の状態だと、python ファイル名 でファイルが開きます。頭にpythonを付けなくても動きます。

    キャンセル

0

以下全て同じ動作になります。

hello.pyは以下の内容としてファイルに記載されているコードを python.exeで実行する方法

c:\temp> type hello.py
print "hello world"

  • 引数に指定されたファイル名のファイルを読み込みこれをソースコードとしてpythonコマンドを実行する
c:\temp> python hello.py
hello world
  • パイプされた標準入力をソースコードとしてpythonコマンドを実行する
c:\temp> type hello.py | python -
hello world
  • リダイレクトされた標準入力をソースコードとしてpythonコマンドを実行する
c:\temp> python - < hello.py
hello world
  • キーボードからhello.pyと同じ内容を入力し、これをソースコードとしてpythonコマンドを実行する
c:\temp> python
Python 3.6.0 (v3.6.0:41df79263a11, Dec 23 2016, 08:06:12) [MSC v.1900 64 bit (AMD64)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> print "hello world"
hello world
>>> [CTRL+Z]

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/02/10 21:51

    cフォルダの直下にtempというフォルダは存在しません。
    どのようにそのディレクトリへ移動すればよいのですか?

    キャンセル

  • 2017/02/10 22:05

    c:\tempのディレクトリはhello.pyが置いてあるディレクトリで読み替えてください

    キャンセル

  • 2017/02/10 22:13

    c:\とはそういう意味を示すんですね!
    ありがとうございます。
    知りませんでした。ちなみになぜtempなんですか?
    temporary だと一時的なという意味になってしまいますが?

    キャンセル

  • 2017/02/10 22:24

    >一時的なという意味になってしまいますが?
    そうです。この回答を書く(試す)為に一時的にhello.pyを作成し一時的に実行するために作成したディレクトリです。

    キャンセル

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

  • ただいまの回答率 89.64%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる