Python|井号开头,如何在Ubuntu终端不用python就执行含中文的py文件

Python|井号开头,如何在Ubuntu终端不用python就执行含中文的py文件

标题有点啰嗦 , 其实这里涉及两个问题 , 一 , 如何在终端里执行py脚本文件;二 , 如果python文件里有中文注释或者中文输出的时候 , 能正确执行脚本(很多时候明明代码程序没问题 , 就因为里面有中文而不能正常执行输出 , 比如乱码啦比如异常啦 , 机智客以前在深度学习应用的学习中遇到过) 。 而这两个其实涉及到一个问题 , 就是python脚本的第一行#号问题 。
我们一般在Ubuntu这样的Linux操作系统里执行某个.py脚本文件的时候 , 往往都需要在终端里文件前面加上python 。 比如如果我们要执行的是jizhike.py文件 , 那么往往需要在终端里这样执行:python jizhike.py --XX XX后面XX是参数和参数值 。 而如果我们光秃秃地执行类似./jizhike.py这样的python文件的时候就会报错提示 , 权限不够;而加上sudo也只是没有这个命令 。 那么能否不带python这么麻烦 , 而直接执行py脚本呢?这就涉及到了python程序文件中代码前几行#号!号的问题了 。

也就是说 , 你需要在第一行写入#!/usr/bin/python3(这个就是你系统里的目录)才能避免不用python XX.py出错 。 而这一句的作用其实就是告诉Linux系统这是一个python脚本 , 需要调用/usr/bin/python3去解释 。 而这个问题 , 往往只在Linux操作系统里出现(没有系统$PATH) , 而如果你在Windows操作系统里 , 或者在系统$PATH下 , 加不加井号其实没什么影响 , 系统会自动忽略 。
当然 , 推而广之 , 在Ubuntu这样的Linux操作系统里 , 这个可以解决其他很多相似的问题比如PHP这样的其他脚本语言 , 也有#!相应的格式规定 。 机智客的意思是说 , 如果在系统里终端中执行某个文件 , 那么相应的解释工具需要安装到系统文件里 , 否则就需要另外指定 。 也就是Ubuntu这样的Linux系统 , usr/bin/目录中提供的是shell , 是为用户提供命令解释器 , 接受某命令 , 就调用相应应用程序解释之 。 Linux中 , 代码文件中#!字符组合代表要用shell脚本执行 。
【Python|井号开头,如何在Ubuntu终端不用python就执行含中文的py文件】同时 , 代码前面井号这个小知识点也能回答为何脚本中涵盖中文就会出错 。 其实就是编码问题 。 这个不仅涉及到中文输出 , 而且还涉及到注释——哪怕你代码中把中文注释掉也不行 , 要解决编码问题就需要在第二行加上 # -*- coding: UTF-8 -*- 即可 。 其实这句代码就是为了告诉Python解释器 , 按照UTF-8编码读取源代码 , 要不然很容易乱码或者出错 。 当然了 , 这依然要我们注意一点 , 如果脚本代码中含有中文 , 那么可要记得保存为UTF-8编码 , 否则……后果你懂的 。