Python sys.argv [0]不显示-c值

时间:2019-07-19 10:39:54

标签: python python-3.x command

Python的新手,线性地从文档开始: https://docs.python.org/3.7/library/sys.html

  

如果使用解释器的-c命令行选项执行了命令,则argv [0]设置为字符串'-c'。如果没有脚本名称传递给Python解释器,则argv [0]为空字符串。

我的代码:

import sys
print(sys.argv)

我的命令:

py main.py -c test

输出:

['main.py', '-c', 'test']

所以即使我输入了-c test sys.argv [0]的值也似乎是'main.py',而文档中指出它应该是'-c'。

所以这里的'-c'实际上是sys.argv [1]。

Python版本:3.7.3。

我误会了吗?

2 个答案:

答案 0 :(得分:1)

这是因为选项-c必须位于第一位置。

我试图创建一个简单的脚本test.py

print('foo')

如果运行python test.py test.py,则只会看到一个foo,这意味着第二个test.py被忽略。这与您的示例py main.py -c test

相同

documentation中,这不是很清楚,但我认为这是一种精神:

  

2.1.1。参数传递

     

当解释器知道时,脚本名称和其后的其他参数将变成字符串列表,并分配给sys模块中的argv变量。您可以通过执行import sys访问此列表。列表的长度至少为1;如果没有脚本和参数,则sys.argv [0]为空字符串。当脚本名称指定为“-”(表示标准输入)时,sys.argv [0]设置为“-”。使用-c命令时,sys.argv [0]设置为'-c'。使用-m模块时,sys.argv [0]设置为所定位模块的全名。在-c命令或-m模块之后找到的选项不会被Python解释器的选项处理占用,而是留在sys.argv中供命令或模块处理。

因此正确的用法是python -c "cmd",而不是python file.py -c file2.py

答案 1 :(得分:0)

启动解释器的第二种方法是python -c命令[arg] ...,它将执行命令中的语句。

-c不会将'-c'字符串作为参数传递给程序,而是在命令中执行一条语句,例如:

python -c "import sys; print(sys.argv)"

在sys.argv中,第一个值始终是执行的python模块的名称,即文件名或命令。