在Python子进程中为sed命令转义

在Python子进程中为sed命令转义,python,unix,sed,subprocess,Python,Unix,Sed,Subprocess,我正在使用Python在子流程的帮助下执行sed delete/replace。不知何故,我没有得到正确的逃跑次数。这是我的密码: from subprocess import call remover = ["sed", "-i", "'1d'", "file"] call(remover) removeq = ["sed", "-i", "'s/\"//g'", "file"] call(removeq) 这两个任务都会生成错误消息: sed: -e expression #1, ch

我正在使用Python在子流程的帮助下执行sed delete/replace。不知何故,我没有得到正确的逃跑次数。这是我的密码:

from subprocess import call

remover = ["sed", "-i", "'1d'", "file"]
call(remover)

removeq = ["sed", "-i", "'s/\"//g'", "file"]
call(removeq)
这两个任务都会生成错误消息:

sed: -e expression #1, char 1: unknown command: `''
第一个列表中的‘符号’需要转义多少次,最后一个列表中的‘符号’需要转义多少次?我尝试了一次、两次和三次,但都没有成功。也没有隐藏的字符可能会把事情搞砸


有什么建议吗?

修复报价机制:

sed -i 's/\"//g' file
应该是:

sed -i 's/"//g' file
您还可以尝试使用
shlex
库。 来自解释器的示例:

>>> import  shlex
>>> cmd = "sed -i '1d' file"
>>> shlex.split(cmd)
['sed', '-i', '1d', 'file']
>>> cmd = """sed -i 's/"//g' file"""
>>> shlex.split(cmd)
['sed', '-i', 's/"//g', 'file']

修正报价机制:

sed -i 's/\"//g' file
应该是:

sed -i 's/"//g' file
您还可以尝试使用
shlex
库。 来自解释器的示例:

>>> import  shlex
>>> cmd = "sed -i '1d' file"
>>> shlex.split(cmd)
['sed', '-i', '1d', 'file']
>>> cmd = """sed -i 's/"//g' file"""
>>> shlex.split(cmd)
['sed', '-i', 's/"//g', 'file']

单引号不正确。在shell中运行命令引用单词时使用单引号,但在直接执行(不涉及shell)时,它们被视为文字字符并混淆
sed
(可以看出)。可能重复“我正在使用Python执行sed delete/replace…”。。。“为什么?只需在Python中以本机方式进行操作……据我所知,如果您希望在不创建新文件的情况下使用sed进行操作,那么使用sed会更简单?如果您将“简单”定义为“实际代码行数最少,但效率较低,因为它会产生额外的进程,并伴随着相关的fork()、exec()、潜在的磁盘访问和其他开销……”单引号不正确。在shell中运行命令引用单词时使用它们,但直接执行(不涉及shell)时,它们被视为文字字符,并混淆
sed
(可以看到)。可能重复“我正在使用Python执行sed delete/replace with…”为什么?只需在Python中以本机方式进行操作……据我所知,如果您希望在不创建新文件的情况下使用sed进行操作,那么使用sed会更简单?如果您将“简单”定义为“实际代码行数最少,但效率较低,因为它会产生额外的进程,并伴随着相关的fork()、exec()、潜在的磁盘访问和其他开销……”
shlex
不是很复杂
shlex
不是很复杂。