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

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

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

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

コマンドプロンプト

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

Q&A

解決済

1回答

233閲覧

実行形式に違いってあるの? $ ./server_08.py と $python3 server_08.py

eisaku123

総合スコア74

Python 3.x

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

コマンドプロンプト

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

0グッド

1クリップ

投稿2017/08/27 05:31

いつも世話になります。

$ ./server_08.py(実行許可)と $python3 server_08.pyで両方とも実行できます。
実行する際に用途によって使いわけた方ががよいのでしょうか?

ちなみに./server_09.py(実行不許可)だと実行できないので実行許可の設定をしないといけないので
手間がかかります。

pi@raspberrypi:~/toku1/08-11-a3 $ server_08.py bash: server_08.py: コマンドが見つかりません pi@raspberrypi:~/toku1/08-11-a3 $ ./server_08.py Sun Aug 27 14:10:49 2017 Server start - 0.0.0.0:8081 ^CKeyboardInterrupt Sun Aug 27 14:10:50 2017 Server stop - 0.0.0.0:8081 pi@raspberrypi:~/toku1/08-11-a3 $ python3 server_08.py Sun Aug 27 14:11:54 2017 Server start - 0.0.0.0:8081 ^CKeyboardInterrupt Sun Aug 27 14:11:56 2017 Server stop - 0.0.0.0:8081 pi@raspberrypi:~/toku1/08-11-a3 $ PATH=$PATH:~/toku1/08-11-a3/ pi@raspberrypi:~/toku1/08-11-a3 $ server_08.py Sun Aug 27 14:12:15 2017 Server start - 0.0.0.0:8081 ^CKeyboardInterrupt Sun Aug 27 14:12:20 2017 Server stop - 0.0.0.0:8081 pi@raspberrypi:~/toku1/08-11-a3 $ pi@raspberrypi:~/toku1/08-11-a3 $ python3 server_09.py Sun Aug 27 14:18:43 2017 Server start - 0.0.0.0:8081 ^CKeyboardInterrupt Sun Aug 27 14:18:51 2017 Server stop - 0.0.0.0:8081 <package_parts.camera.UsbWebCam object at 0x76b17030> 200000 pi@raspberrypi:~/toku1/08-11-a3 $ ./server_09.py bash: ./server_09.py: 許可がありません

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

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

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

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

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

guest

回答1

0

ベストアンサー

./ で実行できるファイルには先頭に以下の様な行が付いているはずです。

#!/usr/bin/python

もしくは

#!/usr/bin/env python

※環境により異なります

これは shebang と呼ばれ、主に UNIX で採用されている実行形式です。また後者は shebang を含んでいても含まれていなくてもインタプリタの引数として指定しているだけになります。

なお、shebang を設定しただけでは動作しません。以下の様に実行権限を付与する必要があります。

$ chmod +x スクリプトファイル

shebang を設定したファイルは拡張子が .py である必要もありません。

投稿2017/08/27 05:46

mattn

総合スコア5030

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

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

mattn

2017/08/27 06:05

ちなみにコマンドプロンプトのタグが付いていますが、回答にも書いたとおり shebang は UNIX で採用されている実行形式なので Windows では動作しません。
eisaku123

2017/08/27 12:06

ありがとうございます。シェバングがないと./は実行できないことがわかりました。あと質問ですが>>また後者は shebang を含んでいても含まれていなくてもインタプリタの引数として指定しているだけになります。 理解できないです。#!がなくてもよいということでしょうか?
mattn

2017/08/27 12:30 編集

はい。無くてもい良いです。その場合、いくら chmod +x で実行権限を付けたとしても ./ では実行出来ません。shebang がある場合、OS は実行ファイルの先頭を見て実行可能形式かを判断します。#! であれば shebang として、ELF であれば elf 形式として実行します。なければ実行形式ではないというエラーになります。 引数で指定する場合、そのファイルを読み込むのはインタプリタになります。 python foo.py ここでいう python がインタプリタ、foo.py がスクリプトファイルです。どちらにしろ読み込むのは python というコマンドであることには違いないです。
eisaku123

2017/08/27 13:07

#!なしで(/usr/bin/env python3)に./で行ったら以下のようになりエラーにはなりませんが、意図する実行になりませんですね。 Python 3.4.2 (default, Oct 19 2014, 13:31:11) [GCC 4.9.1] on linux Type "help", "copyright", "credits" or "license" for more information. >>>
mattn

2017/08/27 13:15 編集

それは shebang ではないからですね。拡張子が .py でないファイル(例: xxx)にそれを書いて file xxx と実行してみて下さい。ASCII text と表示されると思います。シェルがシェルスクリプトのつもりで読み込み、1行目の /usr/bin/env python を実行しただけです。
eisaku123

2017/08/28 00:46

ありがとうございます。 シェバングを無くしたり、引数をなくしたりすることでfileの種類が変わるのがわかりました。 pi@raspberrypi:~/toku1/08-11-a3 $ file eee ←/usr/bin/env python3 eee: ASCII text pi@raspberrypi:~/toku1/08-11-a3 $ file eee ←#!/usr/bin/env python3 eee: Python script, ASCII text executable pi@raspberrypi:~/toku1/08-11-a3 $ file eee ←#!/usr/bin/env eee: a /usr/bin/env script, ASCII text executable
eisaku123

2017/08/28 00:53 編集

すみません、今度は下記のような(#!/usr/bin/env )引数にpython3をなくして実行したら、止まったままの状態なってしまいます。 コンピュータは何を考えいるのでしょう? pi@raspi:~/toku1/08-11-a3 $ ./server_08.py←#!/usr/bin/env ^C pi@raspi:~/toku1/08-11-a3 $ ./server_08.py←#!/usr/bin/env python3 Mon Aug 28 09:41:45 2017 Server start - 0.0.0.0:8081 ^CKeyboardInterrupt Mon Aug 28 09:41:59 2017 Server stop - 0.0.0.0:8081
mattn

2017/08/28 02:24

それは ./shebang shebang というコマンドを実行している事になるので、結果 /usr/bin/env server_08.py を実行している事になります。env を無限に起動し続ける結果になると思うので CPU 高負荷になるかと思いますが。
mattn

2017/08/28 03:16

ちなみにどの様に実行されているか確認されたいのならば pstree -a で確認出来ます。
eisaku123

2017/08/28 03:36 編集

ps aux | grep server_08.py を実施したらcpu:97.7になって高負荷になっていることを確認しました。 (一番下参照) envって何をしているのでしょうか?envをwikipediaでしらべると、トリック的用法とか汎用性が保てる とかってかいてありますが。。。 あとpstree -a で確認しました。はじめてこのコマンドつかい、bashから動いていることがわかりました。 いろいろ勉強になります。 ├─lxterminal --geometry=109x32+1000+0 │ ├─bash │ │ └─server_08.py ./server_08.py PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2290 pi  20 0 312 4   0 R   97.7 0.0   0:39.35 server_08.py
mattn

2017/08/28 03:39

ユーザによっては /usr/bin/python にインストールせず /usr/local/bin/python にインストールする人もいます。それでも shebang を動かせる様に設定したい場合に使うトリックです。env は環境変数 PATH から検索して最初にヒットしたコマンドを起動するコマンドです。
eisaku123

2017/08/29 00:31

ありがとうございます。いろいろな知識が増えました。 あと、ふと疑問に思ったことがありまして内容はずれますが、bash や sh は、メモ帳やpython3、ターミナルなどのようなアプリケーションの位置付けと思えばよいのでしょうか?
mattn

2017/08/29 01:32

Windows で例えると cmd.exe、環境変数や標準入出力などをアプリケーションをアプリケーションと連携させる機能(ソフトウェア)です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問