1. /usr/bin/python2.7

在这里插入图片描述

Python 文件中如果未指定编码 (中文字符),在执行过程会出现报错。

#!/usr/bin/python

# ============================================================================================
# Name        : character_encoding.py
# Author      : Yongqiang Cheng
# Version     : April 16, 2019
# Copyright   : Copyright 2019 ForeverStrong License
# Description : Character Encoding for Linux in Python, Ansi-style
# ============================================================================================

print("你好!")

/usr/bin/python2.7 /home/strong/pyqt5_workspace/character_encoding.py
  File "/home/strong/pyqt5_workspace/character_encoding.py", line 11
SyntaxError: Non-ASCII character '\xe4' in file /home/strong/pyqt5_workspace/character_encoding.py on line 11, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

Process finished with exit code 1
#!/usr/bin/python
#!/usr/bin/python3

Python 中默认的编码格式是 ASCII 格式,没修改编码格式时无法正确打印汉字,所以在读取中文时会报错。

在文件开头加入 # -*- coding: UTF-8 -*- 或者 #coding=utf-8 解决问题。必须放在文件开头,#coding=utf-8 的 = 号两边不要空格。

1.1. example 1

#!/usr/bin/python
# -*- coding: UTF-8 -*-

# ============================================================================================
# Name        : character_encoding.py
# Author      : Yongqiang Cheng
# Version     : April 16, 2019
# Copyright   : Copyright 2019 ForeverStrong License
# Description : Character Encoding for Linux in Python, Ansi-style
# ============================================================================================

print("你好!")

/usr/bin/python2.7 /home/strong/pyqt5_workspace/character_encoding.py
你好!

Process finished with exit code 0

1.2. example 2

指定编码必须放在文件开头。

#!/usr/bin/python

# ============================================================================================
# Name        : character_encoding.py
# Author      : Yongqiang Cheng
# Version     : April 16, 2019
# Copyright   : Copyright 2019 ForeverStrong License
# Description : Character Encoding for Linux in Python, Ansi-style
# ============================================================================================

# -*- coding: UTF-8 -*-

print("你好!")

/usr/bin/python2.7 /home/strong/pyqt5_workspace/character_encoding.py
  File "/home/strong/pyqt5_workspace/character_encoding.py", line 13
SyntaxError: Non-ASCII character '\xe4' in file /home/strong/pyqt5_workspace/character_encoding.py on line 13, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

Process finished with exit code 1

2. /usr/bin/python3.5

在这里插入图片描述

2.1. example 1

#!/usr/bin/python3
# -*- coding: UTF-8 -*-

# ============================================================================================
# Name        : character_encoding.py
# Author      : Yongqiang Cheng
# Version     : April 16, 2019
# Copyright   : Copyright 2019 ForeverStrong License
# Description : Character Encoding for Linux in Python, Ansi-style
# ============================================================================================

print("你好!")

/usr/bin/python3.5 /home/strong/pyqt5_workspace/character_encoding.py
你好!

Process finished with exit code 0

2.2. example 2

#!/usr/bin/python3

# ============================================================================================
# Name        : character_encoding.py
# Author      : Yongqiang Cheng
# Version     : April 16, 2019
# Copyright   : Copyright 2019 ForeverStrong License
# Description : Character Encoding for Linux in Python, Ansi-style
# ============================================================================================

print("你好!")

/usr/bin/python3.5 /home/strong/pyqt5_workspace/character_encoding.py
你好!

Process finished with exit code 0

Python 3.x 源码文件默认使用 UTF-8 编码,所以可以正常解析中文,无需指定 UTF-8 编码。

strong@foreverstrong:~/pyqt5_workspace$ python3 character_encoding.py 
你好!
strong@foreverstrong:~/pyqt5_workspace$ 

3. 脚本第一行 #!/usr/bin/python#!/usr/bin/python3

#!/usr/bin/python
#!/usr/bin/python3

脚本语言的第一行,只对 Linux/Unix 用户适用,用来指定脚本用什么解释器来执行。

包含 #!/usr/bin/python 之后,加上执行权限后,可以直接用 ./ 执行。不然无法执行,因为找不到 Python 解释器。#!/usr/bin/python 是告诉操作系统执行这个脚本的时候,调用 /usr/bin 下的 python 解释器。

#!/usr/bin/env python 这种用法是为了防止操作系统用户没有将 Python 装在默认的 /usr/bin 路径里。当系统看到这一行的时候,首先会到 env 设置里查找 Python 的安装路径,再调用对应路径下的解释器程序完成操作。

#!/usr/bin/python 相当于固定了 Python 路径。#!/usr/bin/env python 会去环境设置寻找 Python 目录,可以增强代码的可移植性,推荐这种写法。

  1. 如果调用 Python 脚本时,使用:
python script.py 

#!/usr/bin/python 被忽略,等同于注释。

  1. 如果调用 Python 脚本时,使用:
./script.py

#!/usr/bin/python 指定解释器的路径,shell 脚本中在第一行也有类似的声明。

所有 Python 程序的第一行应该是 #! 行,它告诉计算机你想让 Python 来执行这个程序,但剩下的内容取决于操作系统。

  • 在 Windows 上,第一行是 #!python3
  • 在 OS X,第一行是 #!/usr/bin/env python3
  • 在 Linux 上,第一行是 #!/usr/bin/python3

没有 #! 行,你也能从 IDE 运行 Python 脚本,但从命令行运行它们就需要这一行

3.1. example 1

#!/usr/bin/python3

# ============================================================================================
# Name        : character_encoding.py
# Author      : Yongqiang Cheng
# Version     : April 16, 2019
# Copyright   : Copyright 2019 ForeverStrong License
# Description : Character Encoding for Linux in Python, Ansi-style
# ============================================================================================

print("你好!")

strong@foreverstrong:~/pyqt5_workspace$ ll
total 24
drwxrwxr-x  3 strong strong 4096 Apr 29 19:41 ./
drwxr-xr-x 96 strong strong 4096 Apr 29 17:49 ../
-rw-rw-r--  1 strong strong  451 Apr 29 19:41 character_encoding.py
strong@foreverstrong:~/pyqt5_workspace$ 


strong@foreverstrong:~/pyqt5_workspace$ ./character_encoding.py
bash: ./character_encoding.py: Permission denied
strong@foreverstrong:~/pyqt5_workspace$ 


strong@foreverstrong:~/pyqt5_workspace$ sudo chmod a+x character_encoding.py 
[sudo] password for strong: 
strong@foreverstrong:~/pyqt5_workspace$ 


strong@foreverstrong:~/pyqt5_workspace$ ll
total 24
drwxrwxr-x  3 strong strong 4096 Apr 29 19:41 ./
drwxr-xr-x 96 strong strong 4096 Apr 29 17:49 ../
-rwxrwxr-x  1 strong strong  451 Apr 29 19:41 character_encoding.py*
strong@foreverstrong:~/pyqt5_workspace$ 


strong@foreverstrong:~/pyqt5_workspace$ ./character_encoding.py 
你好!
strong@foreverstrong:~/pyqt5_workspace$ 

3.2. example 1

# ============================================================================================
# Name        : character_encoding.py
# Author      : Yongqiang Cheng
# Version     : April 16, 2019
# Copyright   : Copyright 2019 ForeverStrong License
# Description : Character Encoding for Linux in Python, Ansi-style
# ============================================================================================

print("你好!")
strong@foreverstrong:~/pyqt5_workspace$ ll
total 24
drwxrwxr-x  3 strong strong 4096 Apr 29 20:00 ./
drwxr-xr-x 96 strong strong 4096 Apr 29 17:49 ../
-rwxrwxr-x  1 strong strong  431 Apr 29 20:00 character_encoding.py*
strong@foreverstrong:~/pyqt5_workspace$ 


strong@foreverstrong:~/pyqt5_workspace$ ./character_encoding.py 
./character_encoding.py: line 9: syntax error near unexpected token `"你好!"'
./character_encoding.py: line 9: `print("你好!")'
strong@foreverstrong:~/pyqt5_workspace$ 


strong@foreverstrong:~/pyqt5_workspace$ python3 character_encoding.py 
你好!
strong@foreverstrong:~/pyqt5_workspace$ 

4. .py 文件起始行

#!/usr/bin/python
# -*- coding: UTF-8 -*-

# ============================================================================================
# Name        : character_encoding.py
# Author      : Yongqiang Cheng
# Version     : April 16, 2019
# Copyright   : Copyright 2019 ForeverStrong License
# Description : Character Encoding for Linux in Python, Ansi-style
# ============================================================================================
#!/usr/bin/python3
# -*- coding: UTF-8 -*-

# ============================================================================================
# Name        : character_encoding.py
# Author      : Yongqiang Cheng
# Version     : April 16, 2019
# Copyright   : Copyright 2019 ForeverStrong License
# Description : Character Encoding for Linux in Python, Ansi-style
# ============================================================================================
#!/usr/bin/python3
# Character Encoding: UTF-8

# ============================================================================================
# Name        : character_encoding.py
# Author      : Yongqiang Cheng
# Version     : April 16, 2019
# Copyright   : Copyright 2019 ForeverStrong License
# Description : Character Encoding for Linux in Python, Ansi-style
# ============================================================================================

References

[1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐