我正在尝试使用执行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
在我的输出文件中。有什么原因以及如何获得预期产量的任何想法? 提前谢谢!
答案 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
。