在Python中如何正确生成字符串'\000'?
Python生成shell命令所需'\000'字符串的解决方案
你遇到的显示差异是Python的repr输出规则、转义序列解析规则两个层面的问题,对应处理方式如下:
- 当你使用
remove_string = '\000'定义时,Python会把八进制转义序列\000直接解析为实际的空字节字符,Python内部统一用\x00表示这类ASCII控制字符,所以你看到输出是'\x00',二者语义完全等价,但这不是你要的shell命令字面量。 - 当你使用
remove_string = r'\000'定义时,原始字符串会保留反斜杠的字面意义,你在交互环境看到的'\\000'是Python为了区分转义符做的repr格式化输出,实际字符串内容就是你需要的\000,执行print(remove_string)即可验证输出符合要求。
场景1:拼接shell命令字符串(shell=True执行)
直接使用原始字符串定义后拼接即可:
src_file = "xxxxx.csv" dst_file = "xxxxx.csv" # 拼接完整shell命令 full_cmd = f"gsutil cp {src_file} - | tr -d '{r'\000'}' | gsutil cp - {dst_file}" # 执行命令 import os os.system(full_cmd)
场景2:subprocess列表传参(shell=False,更安全,推荐)
直接将原始字符串作为tr的参数传入即可:
import subprocess # 拆分pipeline分步骤执行,避免shell注入风险 p1 = subprocess.Popen(["gsutil", "cp", "xxxxx.csv", "-"], stdout=subprocess.PIPE) p2 = subprocess.Popen(["tr", "-d", r"\000"], stdin=p1.stdout, stdout=subprocess.PIPE) p1.stdout.close() p3 = subprocess.Popen(["gsutil", "cp", "-", "xxxxx.csv"], stdin=p2.stdout) p2.stdout.close() p3.wait()
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

