为什么在命令行中使用 sys.argv 时没有引号?

Bri*_*man 3 python shell command-line-arguments

这是一个错误吗?

#!/usr/bin/env python3.6
# filename: tmp.py
import sys

print(sys.argv)
Run Code Online (Sandbox Code Playgroud)

调用:

python tmp.py find . -name '*.py'
Run Code Online (Sandbox Code Playgroud)

实际输出:

['tmp.py', 'find', '.', '-name', '*.py']
Run Code Online (Sandbox Code Playgroud)

预期输出:

['tmp.py', 'find', '.', '-name', "'*.py'"]
Run Code Online (Sandbox Code Playgroud)

请注意实际输出中缺少引用。

Jea*_*bre 5

没有,因为你的shell传递参数给蟒蛇时去掉引号(否则它会扩大*.py通配符)

要得到你想要的东西,你需要:

python tmp.py find -name "'*.py'"
Run Code Online (Sandbox Code Playgroud)

请注意,此行为取决于 shell。在 Windows 上,由于单引号没有特别的含义,通过'*.py',你会得到:

['tmp.py', 'find', '.', '-name', "'*.py'"]
Run Code Online (Sandbox Code Playgroud)

另请注意,受引号保护的通配符在 python 方面没有真正的兴趣,因为您需要去除引号才能使用 glob.glob