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)
请注意实际输出中缺少引用。
没有,因为你的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