python檢測ftp監控
開發環境:
1、操作系統: Windows 10 X64
2、Pycharm 2020.2.1
新建項目後,創建兩個包 ftp_client與ftp_server,分別代表客戶端與服務端。
該項目的完成主要藉助了python提供的socketserver庫來進行連接。
本項目實現了客戶端對於服務端D://文件夾的增加文件,刪除文件,修改文件功能。分別以put,delete,modify表示。
對於client,實現了最基礎的交互功能,用戶可以用如put test.txt等命令來實現功能。修改文件,用戶首先輸入modify z.txt 命令,z.txt是D://文件夾中已經存在的文件,再根據提示,輸入想修改的內容即可修改成功。
在這一模塊中,將重點介紹我在實現項目的過程中遇到的問題。
1、bytes與str的轉換,傳輸以位元組流進行,但是輸出部分內容要以str形式,注意轉換
2、熟悉python的語法
3、熟悉文件相關操作
4、考慮傳輸文件過大的情況
該問題不影響項目的正常使用,但未找到較好的解決辦法
B. python 檢測FTP目錄是否為空
ftp相關命令操作
ftp.cwd(pathname) #設置FTP當前操作的路徑
ftp.dir() #顯示目錄下文件信息
ftp.nlst() #獲取目錄下的文件
ftp.mkd(pathname) #新建遠程目錄
ftp.pwd() #返回當前所在位置
ftp.rmd(dirname) #刪除遠程目錄
ftp.delete(filename) #刪除遠程文件
ftp.rename(fromname, toname)#將fromname修改名稱為toname。
ftp.storbinaly("STOR filename.txt",file_handel,bufsize) #上傳目標文件
ftp.retrbinary("RETR filename.txt",file_handel,bufsize)#下載FTP文件
C. Python,第一次運行從FTP下載目錄下所有文件,之後運行先檢測FTP上文件是否更新,有,則只下載更新的文件
直接使用ftplib就可以實現,其中有一個nlst功能用於查詢目錄,cwd用於改變目錄,還有一個size功能。你這邊只需要保留一個目錄的鏡像。如果發現有目錄差異,或者是文件大小發生變更,就用retrbinary進行文件同步就可以。
另外這樣的ftp自動同步軟體很多年前就有,現在很成熟。不用重新開發。
D. python寫的ftp自動上傳腳本,怎麼判斷重復的文件不重傳呢size判斷不夠精確 有沒有更好的方式跪求大神
這個沒有特別准確的辦法。你連SIZE檢測也信不過。只有自己改程序了。
辦法1:改寫FTP程序,加一個hash確認。以前我這么做過。在python里可以輕松做一個FTP SERVER,加上自己做的MD5檢測就可以了。
辦法2:通過nc轉發請求,在NC里設置一個檢測。
辦法3:如果文件不大,上傳完再下載下來檢測
辦法4:採用自己傳有的流水號,重新設置FTP SERVER,讓它定期根據流水號,生成檢驗碼,然後你在客戶端定期下載這個文件。 這個方法過去在電信系統里經常使用。防出錯效果很好。
E. python查看FTP是否能連接成功的方法
#!/usr/local/bin/python
#-*- coding: UTF-8 -*-
####################################################################
# python 查看FTP是否能連接成功
####################################################################
#import ftplib
##f = ftplib.FTP('192.168.100.214')
##f.login('GDATA_MEM','123456')
##ftplib.set_debuglevel(2) #打開調試級別2,顯示詳細信息
#data=ftplib.FTP('127.0.0.1','admin','123456')
#print data
from ftplib import FTP
def ftp_open(host='',user='',passwd=''): #打開FTP
try:
ftp=FTP()
) #打開調試級別2,顯示詳細信息
) #連接
data=ftp.login(user,passwd) #登錄,如果匿名登錄則用空串代替即可
print () #歡迎詞
#print data
return 1
except:
return 0
if __name__=='__main__':
if ftp_open('127.0.0.1','admin','1234561'): #打開FTP
print "打開FTP成功"
else:
print "打開FTP失敗"
F. 如何使用python腳本實現對windows系統監控
示例:
#!/usr/bin/envpython
#encoding:utf-8
"""
MonitorLog.py
Usage:MonitorLog.py...
Monitorthelogfile
-flogfile
-hhelpinfo
pythonMonitorLog.py-fC:monitor.log
Createdbyzhouboon2011-08-29.
"""
importsys
importos
importgetopt
importsubprocess
importtime
importcodecs
importwinsound
ABSPATH=os.path.dirname(os.path.abspath(__file__))
MONITERCONF='moniter_keyword.txt'#utf8file
defmain():
try:
opts,args=getopt.getopt(sys.argv[1:],'hf:')
exceptgetopt.GetoptError,err:
printstr(err)
print__doc__
return1
path=''
fork,vinopts:
ifk=='-f':
path=v
elifk=='-h':
print__doc__
return0
ifnot(pathandos.path.exists(path)):
print'Invalidpath:%s'%path
print__doc__
return2
#命令行元組
cmd=('tail','-f',path)
print''.join(cmd)
output=subprocess.Popen(cmd,stdout=subprocess.PIPE)
keywordMap={}
#載入監控的關鍵字信息
withcodecs.open(os.path.join(ABSPATH,MONITERCONF),'r','utf8')asf:
lines=f.readlines()
forlineinlines:
line=line.strip()
ifnotline:
continue
keyword,wav=line.strip().split(':')
keywordMap[keyword]=wav
whileTrue:
line=output.stdout.readline()
#processcode,得到輸出信息後的處理代碼
ifnotline:
time.sleep(0.01)
continue
line=line.strip().decode('utf8')
printline
forkeywordinkeywordMap:
ifline.find(keyword)>-1:
winsound.PlaySound(keywordMap[keyword],
winsound.SND_NODEFAULT)
#time.sleep(0.01)
return0
if__name__=='__main__':
sys.exit(main())
G. 如何用python語言監控文件或目錄變化
import os, time
path_to_watch = "."before = dict ([(f, None) for f in os.listdir (path_to_watch)])while 1:
time.sleep (10)
after = dict ([(f, None) for f in os.listdir (path_to_watch)])
added = [f for f in after if not f in before]
removed = [f for f in before if not f in after] if added: print "Added: ", ", ".join (added) if removed: print "Removed: ", ", ".join (removed)
before = after
H. python ftplib監控文件修改時間
用python的ftplib,示例代碼如下,返回目錄內容的詳細信息,自己做下相應的處理就可以了
fromftplibimportFTP
ftp=FTP()
timeout=30
port=21
ftp.connect('192.168.85.1',port,timeout)#連接FTP伺服器
ftp.login('test','test')#登錄
printftp.getwelcome()#獲得歡迎信息
ftp.cwd('test')#設置FTP路徑
printftp.retrlines('LIST')#列出目錄內容