python寫的diff腳本

因爲項目版本之間的diff比較常用到,一般都查看改動過的腳本的diff,尤其是看其他人寫的代碼的時候。有些情況是一個目錄中有很多文件,到最後也不知道都改了哪裏了,於是需要逐個diff。

於是就誕生了這個腳本,這也是很久之前剛開始寫python的時候寫的比較簡陋的.


因爲linux執行ll命令,不同的機器可能顯示不太相同,可做相應調整,下面腳本適應的情況是:

total 12
drwxr-sr-x  3 work work 4096 Nov 22 16:43 bin
drwxr-sr-x  2 work work 4096 Nov  8 10:30 conf
-rw-rw-r--  1 work work   64 Nov 22 15:27 test.pl


兩個腳本構成,主要是思路是檢測新代碼目錄中與舊目錄中腳本的diff,如果新目錄中有新出現的腳本也會發現。

運行腳本爲go_diff.py,調用腳本爲diff_work.py


go_diff.py

import os
import sys
if __name__ == '__main__':
    if len(sys.argv) == 4:
        print "yes,running"
        print "==============================================================="
        file1 = sys.argv[1]
        file2 = sys.argv[2]
        file3 = sys.argv[3]
        cmd = 'ls -l '+file1+' >temp_file1'
        os.system(cmd)
        cmd = 'ls -l '+file2+' >temp_file2'
        os.system(cmd)
        cmd = 'rm -rf '+file3+';mkdir '+file3
        os.system(cmd)
        cmd = 'cat temp_file1 temp_file2|python diff_.py '+file1+' '+file2+' '+file3
        os.system(cmd)
                           
        cmd = 'rm temp_file1 temp_file2'
        os.system(cmd)
        print "==============================================================="
       # find_content(ff,int(sys.argv[1]))
    else:
        print "parameter num error ******"
        print "parameter1:content1"
        print "parameter2:content2"
        print "parameter3:dest_content"



diff_work.py

import sys
import os
def find_content(ff,file1,file2,file3):
    m = {}
    flag = 0
    while True:
         ll = ff.readline().strip()
         if(ll):
             tokens = ll.split(' ')
             if(len(tokens) > 4 and tokens[0].find('drw')!=0):
                 m[tokens[-1]] = 0
             if(len(tokens) < 3 and flag!=0):
                 break
             flag = 1
         else:
             break
    n = {}
    while True:
         ll = ff.readline().strip()
         if(ll):
             tokens = ll.split(' ')
             if(len(tokens) > 4 and tokens[0].find('drw')!=0):
                 n[tokens[-1]] = 0
         else:
             break
    for x in m.keys():
         if(n.has_key(x)):
              print x
              cmd = "diff %s/%s %s/%s > %s/%s" %(file1,x,file2,x,file3,x)
              os.system(cmd)
         else:
              print x
              cmd = 'cat %s/%s > %s/%s' %(file1,x,file3,x)
              os.system(cmd)
if __name__ == '__main__':
    ff = sys.stdin
    if len(sys.argv) == 4:
           find_content(ff,sys.argv[1],sys.argv[2],sys.argv[3])
    else:
           print "error"


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章