Heim >Backend-Entwicklung >Python-Tutorial >#/bin/python是运行什么命令的?

#/bin/python是运行什么命令的?

WBOY
WBOYOriginal
2016-06-06 16:23:551376Durchsuche

#/bin/python是运行什么命令的?求大牛详解。。。
初学Python,练习的时候遇到这个,被鄙视,呜呜~~~~~~~~~~~~~~恨没姿势,求涨~~

回复内容:

首先,楼主,你打漏了一个字符,正确的是

#!/bin/python

要了解这行是干啥用的,得先了解一个“魔数(magic number)”的概念。

每一种文件,在文件开头,都有一个标识文件类型的字节序列,标识这个文件是什么类型的。这个字节序列叫““魔数”。

像unix下的脚本,这个魔数就是"#!"。这个魔数的英文名叫“Shebang”。


操作系统的文件解释器在加载文件时,先要判断文件是什么类型的,然后再加载特定的文件解释器,来解读这个文件。操作系统的文件解释器判断的依据,就是看这个魔数。

所以,当看到"#!"时,操作系统的文件解释器知道这是一个“脚本”。

那具体用哪一种脚本解释器呢?它继续读。

结果发现/bin/python。

也就是要用/bin/python 这个路径下的一个叫“python”的解释器来解释这个文件。

于是操作系统的文件解释器就加载了这个python解释器。 然后操作系统的文件解释器任务就完成了。

当python解释器被加载运行后,它自己来解释这个文件。

这时,它看到第一行: #!/bin/python

它认得一开头的#是标记注释行开始的记号,所以它认为这是一行注释,就直接跳过。
然后开始执行后续的真正的python指令。

综上,这一行,被两个层次的解释器以不同的形式解释。 这就是一行注释!
在#后面加上!才是解释器定义。 这是你在linux/unix系统下运行一个脚本的时候,告诉系统用什么解释器来运行脚本用的
比如你执行一个脚本
<code class="language-text">$ ./script
</code>
#!/bin/python 不是命令,是定义Python解释器位置的。就是告诉系统在什么地方可以找到用于这个脚本的Python解释器。
比如,#!/bin/python3 是定义Python3位置的。
我一般这么写,#!/use/bin/env python
这样可以让系统协助寻找Python解释器,可以在多个系统里面通用。 你用的什么教材?换一本吧,没解释这句的书就不用看了 提醒 UNIX系统 用 /bin/python 来解释执行这个脚本


<code class="language-text">head -1 abc.sh
#! /bin/bash 
</code>
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn