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。
我误会了吗?
答案 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模块的名称,即文件名或命令。