使用詳見官方文件,後面記錄幾個用到的方法
環境:centos7,python3.7,pysvn1.8.0
centos下yum安裝預設安裝python2環境的
python3環境的安裝參考這個
#python2 安裝
yum install pysvn -y
踩坑記錄:從我安裝情況來看,pysvn似乎時不相容python3.7,因為一直沒裝上,下面的報錯2一直搞不定,網上搜尋的教程就算裝上了也特別麻煩,果斷換環境
# python3.6 安裝
wget
#安裝依賴 ,若不安裝依賴會有報錯,見下面
yum install subversion-devel apr-devel apr-util-devel -y
#開始編譯安裝pysvn
tar xzf pysvn-1.8.0.tar.gz
cd pysvn-1.8.0/source/
python3 setup.py configure
make
cd pysvn/
#查詢python包的位置
find / -name site-packages
#建立pysvn資料夾
mkdir /usr/local/lib/python3.6/site-packages/pysvn
#把檔案拷過去完成
cp __init__.py /usr/local/lib/python3.6/site-packages/pysvn
cp _pysvn_3_6.so /usr/local/lib/python3.6/site-packages/pysvn
報錯1:執行python3 setup.py configure
報錯
錯誤:('error:', 'cannot find svn include svn_client.h - use --svn-inc-dir')
解決:yum -y install subversion-devel
報錯2:執行make
報錯,具體報錯找不到了,反正就這個檔案有錯,網上也找不到什麼解決辦法
make: *** [indirectpythoninte***ce.o] 錯誤 1
搜尋了一下,安裝成功的都是python3.6的,3.7就算成功了也是非常麻煩。。。權衡了一下,決定把python換成3.6的
果然十分順利,安裝完成,但是
報錯3:import pysvn
的時候報錯
[root@sonar pysvn]# python3
python 3.6.5 (default, apr 4 2020, 21:12:24)
[gcc 4.8.5 20150623 (red hat 4.8.5-39)] on linux
>>> import pysvn
traceback (most recent call last):
file "", line 1, in file "/usr/local/python3/lib/python3.6/site-packages/pysvn/__init__.py", line 106, in import pysvn._pysvn_3_7
modulenotfounderror: no module named 'pysvn._pysvn_3_7'
搜了半天也沒搜到怎麼回事,冥冥之中覺得是剛才安裝過了,第二次安裝的時候有些檔案沒覆蓋到,重下了pysvn1.8.0安裝就成功了
python3下import pysvn
,沒報錯就成功了
獲取svn版本庫里日誌
client.log(url_or_path,
revision_start=pysvn.revision( opt_revision_kind.head ),
revision_end=pysvn.revision( opt_revision_kind.number, 0 ),
discover_changed_paths=false,
strict_node_history=true,
limit=0,
peg_revision=pysvn.revision(opt_revision_kind.unspecified ),
include_merged_revisions=false,
revprops=list_of_revprop_names)
各個引數:
url_or_path
svn倉庫位址
revision_start
從某個版本開始取日誌
revision_end
到某個版本結束
discover_changed_paths
,strict_node_history
二選一,前者表示(?),後者表示日誌不會交叉複製
limit
限制返回最大日誌數,0表示返回所有
peg_revision
若url_or_path不存在,則自動選擇上乙個存在的修訂版本
include_merged_revisions
不知道
revprops
乙個字串列表,不知道幹嘛用的
返回
res = }
其中path
是**相對路徑,action
是新增/刪除/修改狀態
直接輸出client.log
會得到乙個空陣列,要迴圈輸出每乙個值,如下
for info in log:
print(info.author,info.date,info.message,info.revision)
for e in info.changed_paths:
print(e.path)
print(e.action)
print(e.copyfrom_path)
print(e.copyfrom_revision)
根據**路徑匯出**
寫法:
import pysvn
client = pysvn.client()
file_content = client.export(svnurl, localpath)
具體引數:
revision = \
export( src_url_or_path,
dest_path,
force=false,
revision=pysvn.revision(),
native_eol=none,
ignore_externals=false,
recurse=true,
peg_revision=pysvn.revision( opt_revision_kind.unspecified ),
depth=depth,
ignore_keywords=false )
根據svn**位址src_url_or_path
將檔案匯出到dest_path
目錄下
ignore_externals=false
忽略外部引數
recurse=false
只匯出單個檔案,設為true
遞迴匯出資料夾下檔案,預設為true
peg_revision
指定某個版本的**位址
depth
匯出目錄的深度
寫了乙個python指令碼根據日誌定時獲取svn倉庫**並交給cobra掃瞄的功能。
還沒想好放哪,再說。。。
Solarsi下編譯pysvn的問題
編譯pysvn 1.7.2版本出現下面問題 g shared o pysvn pysvn 2 5.so pysvn.o pysvn callbacks.o pysvn client.o pysvn static strings.o pysvn enum string.o pysvn client c...
python之迴圈中的那些事兒
盤點python中的迴圈也就那麼回事,廢話不羅嗦,下面一起看看吧!if 語句 python中if語句的一般形式如下所示 if condition 1 statement block 1 elif condition 2 statement block 2 else statement block 3...
python複習之 讀寫檔案的那些事
1.讀寫檔案是最常見的io操作。python內建了讀寫檔案的函式,用法和c是相容的。2.要以讀檔案的模式開啟乙個檔案物件,使用python內建的open 函式,傳入檔名和標示符 如f open users michael test.txt r r是讀的意思 可以用w寫來替換。files需要帶上檔案的...