コマンドプロンプト内で起動する、python.exe について
- 評価
- クリップ 1
- VIEW 7,088
コマンドプロンプトについて質問です。
使用環境
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ページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
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"
が実行されます。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+5
Pythonを実行するpython
(Windowsの場合はpython.exe
だが、コマンドプロンプト上では.exeは省略可能)には主に二つの役割があります。
- Pythonのインタプリンタ
Pythonで書かれたスクリプトファイルを指定して、Pythonとしてその内容を実行する。
python ファイル名
という形で実行する。 - 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が用意されている場合があります。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
ctrl + z を押すと、戻ってくると思います。
python pyファイル名
で実行できませんか?
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
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]
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.12%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2017/02/10 15:30
”1つ目が起動するプログラムファイルで、2つ目以降が引数(argument)です。”
今回の場合はpython.exe のあとに引数ではなく、ファイル名が指定しあります。
python.exe hello(←ファイル名)
このような場合、どのように処理されるかが知りたいです。
”もしそうなれば、なぜ1,2は起動するのですか?” に対する回答がいまいちわかりません。
2017/02/10 15:46 編集
helloが引数です。「引数ではなく、ファイル名が」という考え方がおかしいです。
2つ目以降に書いてあるものはすべて引数です(リダイレクト指定は除く)。
ファイル名である引数もあるし、オプションである引数もあります。
> ”もしそうなれば、なぜ1,2は起動するのですか?” に対する回答がいまいちわかりません。
PATHEXTについては理解済みなので省略。
hello.py に対して、拡張子が.pyなので、assoc ,py でファイルタイプが調べられます。
Python.File というファイルタイプであることがわかります。
ftype Python.File で、そのファイルタイプに対して実際に起動するコマンドラインが決まります。
"C:\Windows\py.exe" "%L" %*
なので、"C:\Windows\py.exe" "hello.py" というコマンドラインが実行されます。
(実際には、コマンドで情報を調べるのじゃなくて、レジストリで調べられます)
ほかの拡張子、.txt とか .html とかも調べてみましょう。
2017/02/10 21:26 編集
以下、ファイルの起動順序をを整理してみました。
1 C:\Users\Yuki\Desktop>hello 〇(実行される)
(a)カレントディレクトリに対して、helloファイルを探す。しかし、拡張子が付いていないので、pathextによって.pyが拡張子だと判断される。拡張子が付き、hello.pyとなる。
(b)C:\Users\Yuki>assoc .py
.py=Python.File
なので、python.file だと判断される。
(c)Python.File="C:\WINDOWS\py.exe" "%L" %*
なので、py.exeで起動する。
pythonの後にファイル名を入力した場合、"program read from script file"が適用される。(python --help参照)
2 C:\Users\Yuki\Desktop>hello.py 〇
(b)(c)が実行される。
3 C:\Users\Yuki\Desktop>python hello ×
(a)が実行される。カレントディレクトリにpython.XXX というファイルが見当たらないので、PATHに従いファイルを探す、PATHEXTで拡張子が見つかり python.exeとして起動する。
1の場合は最初に入力されるコマンドがhelloだったので、それに対してpathextが適用されhello.pyとなったが、今回はpythonの引数としてhelloがあります。なので、helloに対してpathextが適用されず、python.pyとならない。python.pyとなった場合は"program read from script file"が適用されファイルが読み込まれるが、今回はpythonなのでファイルとして読み込まれない。
4 C:\Users\Yuki\Desktop>python hello.py 〇
3と途中までは同じ、最後の部分でファイル名がhello.pyと拡張子までしっかりとついているのでファイルとして認められ開く。 (file : program read from script fileが適用される。)
5 C:\Users\Yuki\Desktop>python.exe hello ×
省略
6 C:\Users\Yuki\Desktop>python.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