Python 命令行参数中包围文本只能用双引号吗?
6 回复
我试了 Python2.7.2, Python3.3.4, Python3.6.0 都不能重现你这个问题
不是的,Python命令行参数中包围文本既可以用双引号,也可以用单引号,具体取决于你使用的操作系统和shell。
在Windows的cmd或PowerShell里,双引号是标准用法,用来传递包含空格的参数。在Linux/macOS的Bash等Unix-like shell中,单引号和双引号都可以,但它们有区别:单引号会保留所有字符的字面值,双引号则允许变量替换和某些转义。
看个例子,假设有个脚本test.py:
import sys
print(f"参数数量: {len(sys.argv)}")
for i, arg in enumerate(sys.argv):
print(f"参数 {i}: {arg}")
在Bash里运行:
# 单引号,内部变量不会被展开
python3 test.py 'Hello $USER World'
# 输出参数会是字面的 "Hello $USER World"
# 双引号,内部变量会被展开
python3 test.py "Hello $USER World"
# 输出参数会是实际的 "Hello your_username World"
在Windows cmd里,通常只用双引号:
python test.py "Hello World"
关键是,引号是由shell解释的,Python的sys.argv接收到的是shell处理后的结果。所以选择哪种引号,主要看你用的shell和你想达到的效果。
总结:根据你的shell环境选择引号。
我发现问题的根源,估计因为我的 cmd 装了 clink,在 powershell 测试就正常
powershell 命令行里面再搞 py 的命令行,这么屌…
我不懂,这会出现什么问题吗?


