2. 使用Python解释器
2.1 调用解释器
2.1.1 传入参数
解释器会读取命令行参数,转化为字符串列表存入 sys
模块中的 argv
变量中.执行命令 import sys
你可以导入这个模块并访问这个列表.
Test.py
import sys
print(sys.argv)
使用命令行传入并调用Test.py:
chenxiaoweideMacBook-Pro:2.1.1 chenxiaowei$ python /Users/chenxiaowei/Desktop/Study/Study\ PDF/Python/Python官方文档/TestCase/2.1.1/Test.py 1 2 4 5 5 6
运行结果:
['/Users/chenxiaowei/Desktop/Study/Study PDF/Python/Python官方文档/TestCase/2.1.1/Test.py', '1', '2', '4', '5', '5', '6']
sys.argv[0] 的 值为执行脚本的路径
在命令行中使用不同的路径调用脚本sys.argv[0]
的值:
在不同的路径下采用绝对路径调用Test.py :
chenxiaoweideMacBook-Pro:~ chenxiaowei$ python /Users/chenxiaowei/Desktop/Study/Study\ PDF/Python/Python官方文档/TestCase/2.1.1/Test.py
/Users/chenxiaowei/Desktop/Study/Study PDF/Python/Python官方文档/TestCase/2.1.1/Test.py
chenxiaoweideMacBook-Pro:2.1.1 chenxiaowei$ python /Users/chenxiaowei/Desktop/Study/Study\ PDF/Python/Python官方文档/TestCase/2.1.1/Test.py
/Users/chenxiaowei/Desktop/Study/Study PDF/Python/Python官方文档/TestCase/2.1.1/Test.py
采用绝对路径调用Test.py他们的sys.argv[0]
是一样的
在不同路径下采用相对路径调用Test.py:
chenxiaoweideMacBook-Pro:users chenxiaowei$ python chenxiaowei/Desktop/Study/Study\ PDF/Python/Python官方文档/TestCase/2.1.1/Test.py
chenxiaowei/Desktop/Study/Study PDF/Python/Python官方文档/TestCase/2.1.1/Test.py
chenxiaoweideMacBook-Pro:2.1.1 chenxiaowei$ python Test.py
Test.py
采用相对路径调用Test.py他们的sys.argv[0]
是不同的
但是看以上二者的 共同之处在于你给他传什么他就输出什么(不知道是不是这样设定的, 但是可以这样记忆)
在命令行中执行Python语句:
chenxiaoweideMacBook-Pro:users chenxiaowei$ python -c "print('test')"
test
chenxiaoweideMacBook-Pro:users chenxiaowei$ python -c "import sys;print(sys.argv[0])"
-c
使用python -c commend
命令来执行语句, commend
是你想要的执行的python语句, 最好使用双引号包括起来, 里面字符串使用单引号包起来, 要是二者交换在Windows下是不能行的, Mac下倒是可以.
在命令行中使用模块执行:
chenxiaoweideMacBook-Pro:2.1.1 chenxiaowei$ python -m Test
/Users/chenxiaowei/Desktop/Study/Study PDF/Python/Python官方文档/TestCase/2.1.1/Test.py
在命令行中直接执行:
chenxiaoweideMacBook-Pro:2.1.1 chenxiaowei$ python Test.py
Test.py
chenxiaoweideMacBook-Pro:2.1.1 chenxiaowei$ python Test.py
['/Users/chenxiaowei/Desktop/Study/Study PDF/Python/Python官方文档/TestCase/2.1.1', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python37.zip', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages']
chenxiaoweideMacBook-Pro:2.1.1 chenxiaowei$ python -m Test
['/Users/chenxiaowei/Desktop/Study/Study PDF/Python/Python官方文档/TestCase/2.1.1', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python37.zip', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages']
这样看二者是没有区别的, 且二者都把当前的运行目录的路径加入到了sys.path
中, 且都可以执行
chenxiaoweideMacBook-Pro:TestCase chenxiaowei$ python -m Test
/usr/local/bin/python3.7: No module named Test
##################
chenxiaoweideMacBook-Pro:TestCase chenxiaowei$ python -m 2.1.1/Test
/usr/local/bin/python3.7: No module named Test
把路径向上调整一级, 发现并不能执行此语句, 因为找不到此模块
总结: 搜索模块从sys.path
的路径里面搜索, 且只搜索当前路径的文件夹下, 二者的区别在于sys.path
不同,其实二者也都加了路径, 一个加的是脚本所在的路径, 一个加的是当前运行所在路径, 所以只是模块只会在当前path中有的路径下一级去找, 或是 当前路径 + XXX.XXX 的模块; 另外发现这只在命令行中是这样, 如果模块在代码中通过from和import导入是不会把当前运行路径加入到sys.path
中的只会有当前运行的py所在的路径加入进去,所以会有这样的情况:最外面的py能执行里面的py, 里面的py不能单独执行,因为路径找不到,可能只能通过外面的路径一层一层的通过相对路径执行到里面的py模块
2.1.2 交互模式
通过在命令行中输入 python
进入交互模式, 进入交互模式会显示 >>>
来指示输入下一条指令, 如果要输入多行的指令的话, 它会使用 ...
来提醒输入.
chenxiaoweideMacBook-Pro:~ chenxiaowei$ python
Python 3.7.2 (v3.7.2:9a3ffc0492, Dec 24 2018, 02:44:43)
[Clang 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> if 1==1:
... print("sss")
...
sss
2.2 解释器的运行环境
2.2.1 源文件的字符编码
默认情况下, Python源码文件以 UTF-8
编码方式处理.
如何修改默认编码格式呢? 在第一行写如下特殊的注释
# -*- coding: encoding -*-
encoding
可以是Python支持的任意一种codecs.
查阅资料说是: python3
是默认UTF-8
所以我没有设置也可以显示中文, python2
应该是默认是 ASCII
字符
*除此之外也存在第一行被占用, 写在第二行的情况:
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
可以看到第一行被#!/usr/bin/env python3
占用, 其作用是制定启用什么版本的python解释器
来执行, 这个是UNIX的 shebang
行
拓展:
#!/usr/bin/env python3
和 #!/usr/bin/python3
的区别:
第一种通过寻找环境变量中的路径来执行, 第二种就相当于绝对路径指定哪个解释器.
还可以通过命令行来指定版本的python解释器:
Test.py:
import sys
print(sys.version)
命令行中运行结果:
chenxiaoweideMacBook-Pro:bin chenxiaowei$ python2.7 /Users/chenxiaowei/Desktop/Study/Study\ PDF/Python/Python官方文档/TestCase/2.1.1/Test.py
2.7.10 (default, Feb 22 2019, 21:55:15)
[GCC 4.2.1 Compatible Apple LLVM 10.0.1 (clang-1001.0.37.14)]
chenxiaoweideMacBook-Pro:bin chenxiaowei$ python3 /Users/chenxiaowei/Desktop/Study/Study\ PDF/Python/Python官方文档/TestCase/2.1.1/Test.py
3.7.2 (v3.7.2:9a3ffc0492, Dec 24 2018, 02:44:43)
[Clang 6.0 (clang-600.0.57)]
可以使用这个命令行指定版本来验证上面默认的编码格式:
Test.py:
print("哈咯")
分别运行结果:
chenxiaoweideMacBook-Pro:bin chenxiaowei$ python2.7 /Users/chenxiaowei/Desktop/Study/Study\ PDF/Python/Python官方文档/TestCase/2.1.1/Test.py
File "/Users/chenxiaowei/Desktop/Study/Study PDF/Python/Python官方文档/TestCase/2.1.1/Test.py", line 1
SyntaxError: Non-ASCII character '\xe5' in file /Users/chenxiaowei/Desktop/Study/Study PDF/Python/Python官方文档/TestCase/2.1.1/Test.py on line 1, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
chenxiaoweideMacBook-Pro:bin chenxiaowei$ python3 /Users/chenxiaowei/Desktop/Study/Study\ PDF/Python/Python官方文档/TestCase/2.1.1/Test.py
哈咯
加入指定编码格式之后:
Test.py:
# -*- coding: UTF-8 -*-
print("哈咯")
运行结果:
chenxiaoweideMacBook-Pro:bin chenxiaowei$ python2.7 /Users/chenxiaowei/Desktop/Study/Study\ PDF/Python/Python官方文档/TestCase/2.1.1/Test.py
哈咯
daguniang123
发布了73 篇原创文章 · 获赞 14 · 访问量 1万+
私信
关注