Python 3.7中使用-c选项为何sys.argv[0]未显示'-c'?
你的理解误区在于对
-c选项的使用场景判断 哦,我明白你困惑的点在哪里啦!其实是你混淆了Python解释器的命令行选项和自定义脚本的命令行参数这两个概念~
先搞清楚官方文档里-c选项的正确用法
官方文档说的argv[0]会被设为'-c'的场景,是直接用-c选项让Python解释器执行一段字符串代码,而不是运行某个脚本文件。举个正确的例子:
py -c "import sys; print(sys.argv)" test
执行这个命令后,输出会是:
['-c', 'test']
这时候-c是传递给Python解释器的选项,解释器不会加载任何脚本文件,直接执行-c后面的代码,所以sys.argv[0]就是'-c',后面的test是这段代码的参数。
你的操作为什么不符合预期
你执行的命令是:
py main.py -c test
这里的-c test并不是传递给Python解释器的选项,而是作为main.py这个脚本的命令行参数。Python解释器的工作流程是:
- 找到并加载
main.py脚本 - 把脚本名
main.py设为sys.argv[0] - 把后面的
-c和test依次设为sys.argv[1]和sys.argv[2]
所以你得到的输出['main.py', '-c', 'test']完全是正常的,和文档描述不冲突——因为你的用法根本不是文档里说的-c选项的使用场景呀!
一句话总结
-c是Python解释器的专属选项,必须直接跟在py/python命令后面,不能放在脚本文件名之后。如果放在脚本名后面,它就只是脚本的普通参数而已~
内容的提问来源于stack exchange,提问作者Glorious Kale
相关产品推荐
相关产品推荐

