我想在python中編寫一個svn pre-commit鉤子。其中一部分涉及檢查diff文件以查看是否有任何實際的文件更改(而不僅僅是屬性更改)。避免subprocess.Popen自動轉義grep我的反斜槓
我有一個工作grep命令,我可以在外殼
grep "^\(Added: \|Modified: \|Deleted: \)" diff filename | grep -v 'svn:'
然而,當我把它通過subprocess.POpen它避開了我所有的反斜線,這knackers正則表達式執行罰款。
Executing command: ['grep', '"^\\Added: \\|Modified: \\|Deleted: \\)", ...]
我該如何避免這種情況?
注意:我知道我可以在子流程之間傳遞結果,我可以這樣做兩個greps。我需要幫助獲得第一個第一個工作雖然:/
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)
你使用'shell = True'嗎?你能發佈失敗的代碼嗎? – ecatmur 2012-07-11 12:01:44
命令列表的第二個元素不是有效的Python字符串。請張貼實際的代碼。 – 2012-07-11 12:20:12