sed命令发出的子进程调用

2024-10-02 22:31:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含以下行的文本文件

PIXEL_SCALE      1.0            # size of pixel in arc

将其中的1.0替换为0.3, 我试着用sed viasubprocess.call来自python脚本。 在shell中,遵循sed regex命令可以完美地工作。在

^{pr2}$

但相当于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”)。但没有任何效果。 这里会出什么问题?在

谢谢


Tags: of字符串in命令脚本sizecallsed
3条回答

'引号是shell使用的分隔符。不需要在它们周围使用正则表达式:

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

另外,我使用了raw stringr"....")来防止python解释反斜杠转义序列。在

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

这很管用

相关问题 更多 >