Python传递含大括号的grep正则命令时遇KeyError问题求助
解决Python格式化shell命令时的大括号冲突问题
问题出在Python的str.format()方法会把字符串中的{}识别为格式化占位符,你用反斜杠转义大括号是无效的,format方法要求用**双大括号{{}}**来表示普通的单大括号。
修正后的命令字符串可以这样写:
# 方式1:单引号包裹命令,内部单引号转义,大括号双写转义 cmd = 'cat {0} | grep \'[0-9]{{1,3}}.[0-9]{{1,3}}.[0-9]{{1,3}}.[0-9]{{1,3}}\' | awk \'{print $4}\''.format(file_name) # 方式2:双引号包裹命令,内部单引号无需转义,更简洁 cmd = "cat {0} | grep '[0-9]{{1,3}}.[0-9]{{1,3}}.[0-9]{{1,3}}.[0-9]{{1,3}}' | awk '{{print $4}}'".format(file_name)
关键修正点:
- 把所有
{1,3}替换成{{1,3}},format解析时会自动将{{转为单个{,}}转为单个},避免被识别为格式化占位符。 - 补全原命令结尾
awk '{print $4}'的闭合单引号,你之前的代码遗漏了结尾的转义单引号,导致语法不完整。
如果用subprocess执行命令,额外建议尽量避免shell=True(降低注入风险),但如果必须使用shell命令字符串,上述修正即可解决问题。
内容的提问来源于stack exchange,提问作者S VIJAY
相关产品推荐
相关产品推荐

