Python 命令行参数中包围文本只能用双引号吗?

比如
test.py:
import sys
args = sys.argv
print(args)
>>python test.py hello 'world hhh' "gg mm"
['test.py', 'hello', "'world", "hhh'", 'gg mm']


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 的命令行,这么屌…

我不懂,这会出现什么问题吗?

命令行参数的解析是 Shell 完成的,跟 Python 没关系,只跟你用的是 cmd 还是 bash 有关,你用其他语言来测试 argv 结果也是一样的。

然后 cmd 只支持双引号。结贴

回到顶部