我正在尝试在 python 中编写一个 svn 预提交钩子。其中一部分涉及检查 diff 文件以查看是否有任何实际的文件更改(而不仅仅是属性更改)。
我有一个可以在 shell 上正常执行的 grep 命令
grep "^\(Added: \|Modified: \|Deleted: \)" diff filename | grep -v 'svn:'
但是,当我通过 subprocess.POpen 将其转义时,它会转义我所有的反斜杠,这会破坏正则表达式。
Executing command: ['grep', '"^\\Added: \\|Modified: \\|Deleted: \\)", ...]
我该如何避免这种情况?
注意:我知道我可以在子流程之间传递结果,并且可以通过这种方式执行两个 grep。我需要帮助让第一个工作首先工作:/
NB2:我也尝试使用 filterdiff --clean 代替,但无法正常工作。搜索已添加、已修改或已删除的行,删除带有 'svn:' 的行并检查我有一些结果似乎可行。
Python代码:
command = ['grep', '"^\(Added: \|Modified: \|Deleted: \)"', filename]
sys.stdout.write('Executing command: %s\n' % (command))
p = subprocess.Popen(command,
stdin = subprocess.PIPE
stdout = subprocess.PIPE
stderr = subprocess.STDOUT
shell = True)
data = p.stdout.read()
if len(data) == 0:
sys.stdout.write("Diff does not contain any file modifications./n")
exit(0)