Python命令行参数如何在不使用引号的情况下传入尖括号<和>
无引号传递带尖括号命令行参数的方案
首先需要明确一个核心认知:尖括号被识别为重定向符号,是命令行Shell在将参数传递给Python进程之前就完成的前置解析逻辑,Python解释器本身根本接触不到这部分被Shell提前处理的字符。只要通过Shell自带的转义机制,取消尖括号的特殊解析属性,完全不需要包裹引号,也能把带尖括号的字符串正常传给Python程序。
不同命令行环境的具体操作
Unix/Linux/macOS 通用Shell(Bash、Zsh等)
使用Shell默认的转义符反斜杠\,在每个需要作为普通文本的尖括号前加反斜杠即可,完整执行命令为:
python main.py \<div\>HelloWorld\<div\>
原理:反斜杠会完全取消紧随其后单个字符的特殊含义,Shell看到被转义的<和>,不会将其判定为输入/输出重定向操作符,会把整段字符串按原样传递给Python的sys.argv参数。
Windows 平台不同命令行
CMD(传统命令提示符)
CMD的转义符为脱字符^,在每个尖括号前加^即可屏蔽重定向解析,完整执行命令为:
python main.py ^<div^>HelloWorld^<div^>
PowerShell
PowerShell的转义符为反引号`,在每个尖括号前加反引号即可生效,完整执行命令为:
python main.py `<div`>HelloWorld`<div`>
相关注意事项
- 这种转义实现方式和你已知的引号包裹方法,底层逻辑完全一致:都是遵循Shell的语法规则,阻止Shell提前处理参数里的特殊字符。区别只是引号是对整段参数批量屏蔽特殊含义,转义是对单个字符逐个取消特殊属性。
- 虽然转义方法不需要使用引号,但如果参数本身包含空格、其他Shell特殊字符(如
$、!、*等),需要对每个特殊字符单独转义,很容易遗漏,可读性远低于引号包裹的写法,日常开发更推荐使用引号包裹的方案。 - 你最初直接执行带尖括号的命令触发报错的本质原因:Shell解析时将开头的
<识别为输入重定向操作,尝试读取名为div的文件作为Python进程的标准输入;将后续的>识别为输出重定向操作,尝试把Python的标准输出写入名为HelloWorld<div的文件,Python程序全程都没有收到你预期的字符串参数,自然会出现运行异常。
内容的提问来源于stack exchange,提问作者achen17
相关产品推荐
相关产品推荐

