如何在不使用原始字符串的情况下将sed
命令传递给popen
?在
当我以列表形式将sed命令传递给popen
时,我得到一个错误:unterminated address regex
(参见第一个示例)
>>> COMMAND = ['sed', '-i', '-e', "\$amystring", '/home/map/myfile']
>>> subprocess.Popen(COMMAND).communicate(input=None)
sed: -e expression #1, char 11: unterminated address regex
使用原始字符串形式,它按预期工作:
^{pr2}$我非常感兴趣的是将"\$amystring"
作为列表的一个元素传递。请避免回答
>>> COMMAND = r" ".join(['sed', '-i', '-e', "\$amystring", '/home/map/myfile']
>>> subprocess.Popen(COMMAND, shell=True).communicate(input=None)
这两种形式的区别在于,以
shell=True
作为参数,字符串按原样传递给shell,然后由shell解释它。这将导致(使用bash):正在运行。在
使用list参数和默认的
^{pr2}$shell=False
,python直接用列表中的参数调用可执行文件。在本例中,文本字符串被传递给sed并且
'\$amystring'
不是有效的sed
表达式。在这种情况下,你需要打电话因为不需要为shell转义字符串。在
没有原始字符串这样的东西。只有原始字符串文本。在
它是你在Python源代码中键入的东西。在
r'\$amystring'
和'\\$amystring'
是相同的strings对象,尽管使用不同的string字符串文本来表示。在As @Jonathan Villemaire-Krajden said:如果没有
shell=True
,则不需要转义$
shell元字符。只有在shell中运行命令时才需要它:注意:输出中没有反斜杠。在
不要使用
^{pr2}$.communicate()
,除非使用PIPE
重定向标准流,否则可以使用call()
,check_call()
:要在Python中模拟
$amystring
sed命令(±newlines):相关问题 更多 >
编程相关推荐