python中的sed systemcall在macOS上生成SOH字符10.12.4

时间:2017-03-30 20:41:25

标签: python bash sed system-calls

我正在尝试使用执行sed-systemcall的python脚本替换.h文件中的某些字符。

这是变量\ orig.h中的行,我想要' 10'替换为数组中的值:

#define PACKET_DELAY_TIME_A 10

如果我在bash中运行sed-command,那么例如

sed -E 's/(#define PACKET_DELAY_TIME_A).*/\1 2/' variables\ orig.h > variables.h

这完全正常,输出是预期的,即' 10'被替换为' 2'

但是,当我使用python系统调用时,例如

import os

pckt_delay_A = ["1","2","5","10","20"]
command = "sed -E 's/(#define PACKET_DELAY_TIME_A).*/\1 " + pckt_delay_A[1] + "/' variables\ orig.h > variables.h"
os.system(command)

这会生成SOH字符而不是预期的#define PACKET_DELAY_TIME_A'

\u0001 2

在我的输出文件中。有什么原因以及如何获得预期产量的任何想法? 提前谢谢!

1 个答案:

答案 0 :(得分:1)

使用原始字符串。使用普通字符串,\1由Python解释,这意味着将带有ASCII代码1的字符放入字符串中,而不是传递给shell。

command = r"sed -E 's/(#define PACKET_DELAY_TIME_A).*/\1 " + pckt_delay_A[1] + r"/' variables\ orig.h > variables.h"

或者,您可以使用其re模块编写在Python中执行此操作的代码,而不是调用sed