Python中subprocess.call执行shell命令时如何处理转义字符?
上面主要是想去掉^A 前的.但是却失败了。 shell 中直接执行 sed -i 's/\^A/^A/g' test.txt 就能成功了
感觉应该是表达式出了问题,可是引用 re 貌似也没效果,请教一下这个的正确写法。
from subprocess import call
import re
fp = 'test.txt'
call(["sed","-i","s/\\\^A/\^A/g",fp]) #ctrl+v,a
call(["sed","-i",r"s/\\\^A/\^A/g",fp])
或者不用 sed,用 python 能替换掉也好。
Python中subprocess.call执行shell命令时如何处理转义字符?
3 回复
在Python的subprocess.call里处理shell命令的转义字符,关键在于正确使用参数传递方式。
核心要点:
- 使用列表形式传递参数,让Python自动处理转义
- 避免使用字符串形式通过shell执行,除非确实需要shell特性
正确做法示例:
import subprocess
# 错误方式:使用字符串通过shell执行,容易出转义问题
# subprocess.call('ls -l *.txt', shell=True) # 不推荐
# 正确方式1:使用列表参数,不需要shell=True
subprocess.call(['ls', '-l', '*.txt'])
# 正确方式2:处理带特殊字符的文件名
filename = "file with spaces.txt"
subprocess.call(['cat', filename]) # Python会自动处理
# 正确方式3:需要环境变量时
import os
env = os.environ.copy()
env['MY_VAR'] = 'some value'
subprocess.call(['echo', '$MY_VAR'], env=env)
如果必须使用shell=True(比如需要管道、通配符等shell特性):
# 使用shlex.quote来安全转义
import shlex
import subprocess
command = 'echo ' + shlex.quote('特殊字符&|<>')
subprocess.call(command, shell=True)
简单总结: 优先用列表传参,必须用shell时记得用shlex.quote。
你这是在处理 hive 导出的文件?
https://blog.csdn.net/qq_16018407/article/details/78901809
Python 字符串有反斜槓的話,直接在字符串前加 r 吧

