Python sed命令的子进程调用出现错误

Python sed命令的子进程调用出现错误,python,regex,sed,subprocess,Python,Regex,Sed,Subprocess,我有一个文本文件,其中包含以下行 PIXEL_SCALE 1.0 # size of pixel in arc 将其中的1.0替换为0.3, 我试图通过python脚本中的subprocess.call使用sed。 下面的sed regex命令可以在shell中完美地工作 sed -i 's/^\(PIXEL_SCALE\s*\)\([0-9]*\.[0-9]*\)/\10.3/' filename.txt 但是等效的subprocess.call命令给出了以

我有一个文本文件,其中包含以下行

PIXEL_SCALE      1.0            # size of pixel in arc
将其中的1.0替换为0.3, 我试图通过python脚本中的subprocess.call使用sed。 下面的sed regex命令可以在shell中完美地工作

sed -i 's/^\(PIXEL_SCALE\s*\)\([0-9]*\.[0-9]*\)/\10.3/' filename.txt
但是等效的subprocess.call命令给出了以下错误

subprocess.call(['sed','-i',"'s/^\(PIXEL_SCALE\s*\)\([0-9]*\.[0-9]*\)/\10.3/'",'filename.txt'])

sed: -e expression #1, char 1: unknown command: `''
我尝试将字符串转换为原始字符串,方法是在字符串前面加上r,还尝试了.encode(“UTF-8”)。但它们没有任何效果。 这里会出什么问题

谢谢

行得通

行得通

行得通


有效的

引号是shell使用的分隔符。由于不使用shell,因此在正则表达式中不需要它们:

subprocess.call(['sed','-i',r"s/^\(PIXEL_SCALE\s*\)\([0-9]*\.[0-9]*\)/\10.3/",'filename.txt'])
#                           ^^                                                             ^

此外,我还使用(
r“…”
)防止python解释反斜杠转义序列。

引号是shell使用的分隔符。由于不使用shell,因此在正则表达式中不需要它们:

subprocess.call(['sed','-i',r"s/^\(PIXEL_SCALE\s*\)\([0-9]*\.[0-9]*\)/\10.3/",'filename.txt'])
#                           ^^                                                             ^
's/(PIXEL_SCALE\s*)[0-9]+[0-9]+/\10.3/'

此外,我还使用(
r“…”
)防止python解释反斜杠转义序列。

引号是shell使用的分隔符。由于不使用shell,因此在正则表达式中不需要它们:

subprocess.call(['sed','-i',r"s/^\(PIXEL_SCALE\s*\)\([0-9]*\.[0-9]*\)/\10.3/",'filename.txt'])
#                           ^^                                                             ^
's/(PIXEL_SCALE\s*)[0-9]+[0-9]+/\10.3/'

此外,我还使用(
r“…”
)防止python解释反斜杠转义序列。

引号是shell使用的分隔符。由于不使用shell,因此在正则表达式中不需要它们:

subprocess.call(['sed','-i',r"s/^\(PIXEL_SCALE\s*\)\([0-9]*\.[0-9]*\)/\10.3/",'filename.txt'])
#                           ^^                                                             ^
's/(PIXEL_SCALE\s*)[0-9]+[0-9]+/\10.3/'

此外,我使用(
r“…”
)阻止python解释反斜杠转义序列。

尝试subprocess.Popen(“sed-I's/^(PIXEL\u SCALE\s*)([0-9]*\.[0-9]*.[0-9]/\10.3/'filename.txt”,shell=True”)尝试subprocess.Popen(“sed-I's/^(PIXEL\u SCALE\s*)([0-9]*.[0-9]*.\10.3/'filename.txt],shell=True”)尝试subprocess.Popen(“sed-i's/^(PIXEL\u SCALE\s*)([0-9]*\.[0-9]*)/\10.3/'filename.txt”,shell=True)请尝试subprocess.Popen(“sed-i's/^(PIXEL\u SCALE\s*)([0-9]*\.[0-9]*)/\10.3/'filename.txt”,shell=True”)你能在你的anwser中包含单词吗?那可能会让它更清晰。你能在anwser中包含单词吗?那可能会让它更清晰。你能在anwser中包含单词吗?那可能会让它更清晰。谢谢。这很有效。我尝试过删除引号和添加r分别。但没有同时尝试。谢谢。谢谢。这很有效。我尝试了删除引号和分别添加r。但是没有同时尝试。谢谢。谢谢。这很有效。我尝试了删除引号和分别添加r。但是没有同时尝试。谢谢。谢谢。这很有效。我尝试了两个删除g引号以及分别添加r。但是没有同时尝试。谢谢。谢谢。但是为了使它工作,我还必须在字符串后面加一个r,以防止python转义其中的\s。添加
shell=True
可以通过在您和数据之间添加另一个进程来修复它。更好的修复方法是了解发生了什么,并且emove使shell不再复杂化。更好的修复方法仍然是在Python本身中执行此简单替换,因为Python本身已经为该任务做好了充分的准备。谢谢。但是为了使其工作,我还必须在字符串后面加上一个r,以防止Python从中转义\s。添加
shell=True
通过添加另一个进程来修复它在您和您的数据之间。更好的修复方法是了解正在发生的事情,并将shell从复杂的事情中移除。更好的修复方法仍然是在Python本身中执行此简单的替换,它已经为任务做好了充分的准备。谢谢。但为了使其工作,我还必须在字符串后面加上一个r,以防止Python从i中转义\st、 添加
shell=True
通过在您和数据之间添加另一个进程来修复它。更好的修复方法是了解正在发生的事情,并将shell从复杂的事情中移除。更好的修复方法仍然是用Python本身执行这个简单的替换,Python本身已经为任务做好了充分的准备。谢谢。但是为了让它工作,我还需要ad将字符串后缀为r,以防止python转义其中的\s。添加
shell=True
可通过在您和数据之间添加另一个进程来修复它。更好的修复方法是了解正在发生的事情,并消除shell的复杂性。更好的修复方法仍然是在python中执行此简单替换elf,装备精良,可执行任务。
's/(PIXEL_SCALE\s*)[0-9]+[0-9]+/\10.3/'