gpt4 book ai didi

python - 如何在不使用原始字符串的情况下将 `sed` 命令传递给 `popen`?

转载 作者:行者123 更新时间:2023-12-01 04:51:06 26 4
gpt4 key购买 nike

如何在不使用原始字符串的情况下将 sed 命令传递给 popen

当我以列表形式将 sed 命令传递给 popen 时,出现错误:未终止的地址正则表达式(请参阅第一个示例)

>>> COMMAND = ['sed', '-i', '-e', "\$amystring", '/home/map/myfile']
>>> subprocess.Popen(COMMAND).communicate(input=None)
sed: -e expression #1, char 11: unterminated address regex

使用原始字符串形式,它按预期工作:

>>> COMMAND = r"""sed -i -e "\$amystring" /home/map/myfile"""
>>> subprocess.Popen(COMMAND, shell=True).communicate(input=None)

我真的很想将 "\$amystring" 作为列表的元素传递。请避免使用诸如

之类的答案
>>> COMMAND = r" ".join(['sed', '-i', '-e', "\$amystring", '/home/map/myfile'] 
>>> subprocess.Popen(COMMAND, shell=True).communicate(input=None)

最佳答案

两种形式之间的区别在于,使用 shell=True 作为参数,字符串按原样传递给 shell,然后由 shell 对其进行解释。结果(使用 bash):

sed -i -e \$amystring /home/map/myfile

正在运行。

使用列表args和默认的shell=False,python直接使用列表中的参数调用可执行文件。在本例中,文字字符串被传递给 sed,

sed -i -e '\$amystring' /home/map/myfile

'\$amystring' 不是有效的 sed 表达式。在这种情况下,您需要调用

>>> COMMAND = ['sed', '-i', '-e', "$amystring", '/home/map/myfile']
>>> subprocess.Popen(COMMAND).communicate(input=None)

因为 shell 不需要对字符串进行转义。

关于python - 如何在不使用原始字符串的情况下将 `sed` 命令传递给 `popen`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28458785/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com