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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

Q&A

解決済

4回答

9445閲覧

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

Surface-Yuki

総合スコア34

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

0グッド

1クリップ

投稿2017/02/09 16:53

編集2017/02/09 18:01

###コマンドプロンプトについて質問です。
使用環境
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という起動ファイルはどのような役割があるのですか?

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

ベストアンサー

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

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

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

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

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

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

投稿2017/02/10 05:26

編集2017/02/10 05:29
otn

総合スコア84555

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Surface-Yuki

2017/02/10 06:30

回答ありがとうございます。 ”1つ目が起動するプログラムファイルで、2つ目以降が引数(argument)です。” 今回の場合はpython.exe のあとに引数ではなく、ファイル名が指定しあります。 python.exe hello(←ファイル名) このような場合、どのように処理されるかが知りたいです。 ”もしそうなれば、なぜ1,2は起動するのですか?” に対する回答がいまいちわかりません。
otn

2017/02/10 06:46 編集

> 今回の場合はpython.exe のあとに引数ではなく、ファイル名が指定しあります。 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 とかも調べてみましょう。
Surface-Yuki

2017/02/13 05:44 編集

(以下のコメントは回答者から指摘された部分を修正して書き直したものです。) 以下、ファイルの起動順序をを整理してみました。 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 〇 省略
Surface-Yuki

2017/02/11 15:05 編集

小さな疑問点が一つ生まれました。 理解すれば、するほど疑問点が増えて楽しいです。 本当に回答して下さり、ありがとうございます。 勉強になります。 C:\Windows\py.exeと C:\Users\Yuki\AppData\Local\Programs\Python\Python36にあるpython.exe は別の機能を持っているにですか? 2つともpythonのインタラクティブシェルが起動します。(コマンドプロンプトでpythonと入力した状態)
can110

2017/02/10 13:00

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

2017/02/10 13: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
guest

0

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/09 21:00

編集2017/02/09 21:01
raccy

総合スコア21735

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Surface-Yuki

2017/02/09 21:24

回答ありがとうございます。 1Pythonのインタプリンタ に関しては、python.exeを実行しなくても動作すると思うのですが、 例えば、C:\Users\Yuki\Desktop>python ruler.py と打てば結果は正しく表示されます。さらに pythonを省略してファイル名だけでも動作します。 なので、REPL機能が増えるだけという理解で良いのでしょうか?
raccy

2017/02/09 21:52

違います。Windowsのコマンドプロンプトでは".exe"部分を省略できる(勝手に補完する)だけで、pythonとうっても実際はpython.exeが実行されます。"python rule.py"も"python.exe rule.py"も"python"も"python.exe"も実際に実行されるのはpython.exeです。
raccy

2017/02/09 21:55

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

2017/02/10 00: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は起動するのですか? 「ここまで質問」
raccy

2017/02/10 13:32

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

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 07:25

編集2017/02/10 07:45
Y.H.

総合スコア7914

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Surface-Yuki

2017/02/10 12:51

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

2017/02/10 13:05

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

2017/02/10 13:13

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

2017/02/10 13:24

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

0

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

python pyファイル名

で実行できませんか?

投稿2017/02/09 17:16

mugicya

総合スコア1046

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Surface-Yuki

2017/02/09 21:26

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

2017/02/09 21:37

ctl +z の意味がわかりました。 python.exeを終了するコマンドですね。quit()と同じ python.exeを起動する前の状態(コマンドプロンプトを開いただけ)の状態だと、python ファイル名 でファイルが開きます。頭にpythonを付けなくても動きます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問