python -SFTP


#coding=utf-8
'''
Created on Jun 6, 2017

@author: wb
'''
import wx
import os
import shutil
import sys
import os.path
import paramiko
from paramiko import sftp
import time
import WtgGetCfg
from WtgGetCfg import getCfg
from WtgGetCfg import saveCfg

def main():
? ? global path
? ? global rootdir? # 指明被遍歷的文件夾
? ? global ToPath
? ? global host
? ? global user
? ? global passwd
? ? global mtime
#? ? ? time.strftime('%Y_%m',time.localtime(time.time()))
? ? txtName = time.strftime('%Y_%m',time.localtime(time.time()))
? ? f = file(txtName, "a+")
#? ? history = f.read()
? ? f.close()
? ?
? ? print txtName
? ?
? ? host,rootdir,user,passwd,lastTime,ToPath = getCfg()
? ?
? ? if not os.path.isdir(ToPath):
? ? ? ? os.makedirs(ToPath)
? ? ? ? print 'New Floder Successful'

? ? mtime = lastTime
? ? historyTime = time.strptime(lastTime,"%a %b %d %H:%M:%S %Y")

? ? print time.mktime(historyTime)

? ? print host,rootdir,user,passwd,lastTime,ToPath

? ? try:
? ? ? ? t = paramiko.Transport((host,22))
? ? ? ? t.connect(username=user, password=passwd)
? ? ? ? sftp = paramiko.SFTPClient.from_transport(t)
? ? except:
? ? ? ? print "connection failed "
? ? ? ? f2 = open(txtName, "a")
? ? ? ? name = "connection failed"+"\t"+time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))+"\n"
? ? ? ? f2.write(name)
? ? ? ? f2.close()
#? ? ? ? app = wx.PySimpleApp()
? ? ? ? app = wx.App()
? ? ? ? dlg = wx.MessageDialog(None, 'connection failed'+"\n"+time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 'Warning !',
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? wx.OK | wx.ICON_INFORMATION
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #wx.YES_NO | wx.NO_DEFAULT | wx.CANCEL | wx.ICON_INFORMATION
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? )
? ? ? ? dlg.ShowModal()
? ? ? ? dlg.Destroy()
? ? ? ? return -1? ?

? ?
? ? for parent,dirnames,filenames in os.walk(u''+rootdir.encode('gbk')):? ? #三個參數:分別返回1.父目錄 2.所有文件夾名字(不含路徑) 3.所有文件名字
? ? ? ? f1 = open(txtName, "a")
? ? ? ? for filename in filenames:? ? ? ? ? ? ? ? ? ? ? ? #輸出文件信息
#? ? ? ? print "parent is:" + parent
#? ? ? ? print "filename is:" + filename
#? ? ? ? print "the full name of the file is:" + os.path.join(parent,filename) #輸出文件路徑信息
? ? ? ? ? ? mtime = time.ctime(os.path.getmtime(os.path.join(parent,filename)))
? ? ? ? ? ? print mtime
? ? ? ?
? ? ? ? ? ? nowTime = time.strptime(mtime,"%a %b %d %H:%M:%S %Y")
? ? ? ? ? ? print time.mktime(nowTime)
? ? ? ? ? ? if nowTime > historyTime :
? ? ? ? ? ? ? ? print filename
? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? if sftp.put(os.path.join(parent,filename),filename):
? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? shutil.copy (os.path.join(parent,filename), ToPath)
? ? ? ? ? ? ? ? ? ? os.remove (os.path.join(parent,filename))
? ? ? ? ? ? ? ? ? ? print 'success'
? ? ? ? ? ? ? ? ? ? name = filename +"\t"+"ok"+"\t"+time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))+"\n"
? ? ? ? ? ? ? ? ? ? f1.write(name)
? ? ? ? ? ? ? ? else:
? ? ? ? ? ? ? ? ? ? app = wx.App()
? ? ? ? ? ? ? ? ? ? dlg = wx.MessageDialog(None, filename+'upload failed',
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 'Warning !',
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? wx.OK | wx.ICON_INFORMATION
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #wx.YES_NO | wx.NO_DEFAULT | wx.CANCEL | wx.ICON_INFORMATION
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? )
? ? ? ? ? ? ? ? ? ? dlg.ShowModal()
? ? ? ? ? ? ? ? ? ? dlg.Destroy()
? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? print 'be defeated'
? ? ? ? ? ? ? ? ? ? print filename
? ? ? ? ? ? ? ? ? ? name = filename +"\t"+"fail"+"\t"+time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))+"\n"
? ? ? ? ? ? ? ? ? ? f1.write(name)
? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ?
? ? ?
#? ? ? ? if filename in history:
? ? ? ? ? ?
? ? ? ? ? ? else:
? ? ? ? ? ? ? ? print '已經上傳過'
#? ? ? ? ?
? ? saveCfg(mtime)
? ? f1.close()
if __name__ == '__main__':
? ? main()
? ? ? ? ?

先上代碼蜻展,以上是SFTP上傳的 Python代碼。

這個段代碼配有一個XML文件的配置文件(必須和運行程序在同一目錄下)

文件名uploader.xml

<data>
? <app>
? <IP>192.168.1.100</IP>
? <path>C:/Users/Desktop/new</path>
? <user>test</user>
? <password>11</password><lastTime>Mon Dec 05 17:59:32 2016</lastTime>
? <ToPath>C:/Desktop/opc/new2</ToPath></app>
</data>

有配置文件必須要配帶有 操作文件的 代碼:

#!/usr/bin/python
#coding=utf-8?
from xml.dom.minidom import parse
import xml.dom.minidom
import os

global xmlFile
xmlFile = "\\uploader.xml"

global folder
global IP_Addr
global total_cycle


def getCfg():
? ? global appDir
? ? global xmlFile
? ? appDir = os.getcwd()
? ? xmlFile = appDir + xmlFile
? ? if? (os.path.exists(xmlFile))? :
? ? ? ? DOMTree = xml.dom.minidom.parse(xmlFile)
? ? ? ? Data = DOMTree.documentElement
? ? ? ? Apps = Data.getElementsByTagName("app")
? ? ? ? for app in Apps:?
? ? ? ? ? ? if app.hasAttribute("folder"):
? ? ? ? ? ? ? ? print "foldername: %s" % app.getAttribute("folder")? ? ?
#? ? ? ?
? ? ? ? ? ? ip = app.getElementsByTagName('IP')[0]
? ? ? ? ? ? #print "total_wtg: %s" % total_wtg.childNodes[0].data? ? ? ? ?
? ? ? ? ? ?
? ? ? ? ? ? user = app.getElementsByTagName('user')[0]
? ? ? ? ? ?
? ? ? ? ? ? password = app.getElementsByTagName('password')[0]
? ? ? ? ? ?
? ? ? ? ? ? lastTime = app.getElementsByTagName('lastTime')[0]
? ? ? ? ? ? #print "server_option: %s" % server_option.childNodes[0].data? ? ? ?
? ? ? ? ? ?
? ? ? ? ? ? path = app.getElementsByTagName('path')[0]
#? ? ? ? ? ? print "wf_name: %s" % wf_name.childNodes[0].data

? ? ? ? ? ? ToPath = app.getElementsByTagName('ToPath')[0]
? ? ? ? ? ?
? ?
? ? ? ? return? ip.childNodes[0].data,? \
? ? ? ? path.childNodes[0].data,user.childNodes[0].data,password.childNodes[0].data,lastTime.childNodes[0].data,\
? ? ? ? ToPath.childNodes[0].data
? ? ?

def saveCfg(time):
? ? global xmlFile
? ? DOMTree = xml.dom.minidom.parse(xmlFile)
? ? Data = DOMTree.documentElement
? ? Apps = Data.getElementsByTagName("app")
? ? for app in Apps:?
? ? ? ? if app.hasAttribute("folder"):
? ? ? ? ? ? print "foldername: %s" % app.getAttribute("folder")
? ? ?
? ? ? ? lastTime= app.getElementsByTagName('lastTime')[0]
? ? ? ? print "folder: %s" % lastTime.childNodes[0].data
? ? ? ? # folder
? ? ? ? lastTime.childNodes[0].data = time
? ? ? ?
? ? ? ?
? ? ? ? f = file(xmlFile, "w")
? ? ? ? Data.writexml(f)
? ? ? ? f.close()? ? ? ?
? ? return True
? ?

這樣的話就可以實現相對比較靈活點的? SFTP 上傳。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末旬盯,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子题篷,更是在濱河造成了極大的恐慌焚廊,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,185評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件撒蟀,死亡現場離奇詭異,居然都是意外死亡温鸽,警方通過查閱死者的電腦和手機保屯,發(fā)現死者居然都...
    沈念sama閱讀 90,445評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來涤垫,“玉大人姑尺,你說我怎么就攤上這事◎疴” “怎么了切蟋?”我有些...
    開封第一講書人閱讀 157,684評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長榆芦。 經常有香客問我柄粹,道長,這世上最難降的妖魔是什么匆绣? 我笑而不...
    開封第一講書人閱讀 56,564評論 1 284
  • 正文 為了忘掉前任驻右,我火速辦了婚禮,結果婚禮上犬绒,老公的妹妹穿的比我還像新娘旺入。我一直安慰自己,他們只是感情好凯力,可當我...
    茶點故事閱讀 65,681評論 6 386
  • 文/花漫 我一把揭開白布茵瘾。 她就那樣靜靜地躺著,像睡著了一般咐鹤。 火紅的嫁衣襯著肌膚如雪拗秘。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,874評論 1 290
  • 那天祈惶,我揣著相機與錄音雕旨,去河邊找鬼扮匠。 笑死,一個胖子當著我的面吹牛凡涩,可吹牛的內容都是我干的棒搜。 我是一名探鬼主播,決...
    沈念sama閱讀 39,025評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼活箕,長吁一口氣:“原來是場噩夢啊……” “哼力麸!你這毒婦竟也來了?” 一聲冷哼從身側響起育韩,我...
    開封第一講書人閱讀 37,761評論 0 268
  • 序言:老撾萬榮一對情侶失蹤克蚂,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后筋讨,有當地人在樹林里發(fā)現了一具尸體埃叭,經...
    沈念sama閱讀 44,217評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,545評論 2 327
  • 正文 我和宋清朗相戀三年悉罕,在試婚紗的時候發(fā)現自己被綠了赤屋。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,694評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡蛮粮,死狀恐怖益缎,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情然想,我是刑警寧澤,帶...
    沈念sama閱讀 34,351評論 4 332
  • 正文 年R本政府宣布欣范,位于F島的核電站变泄,受9級特大地震影響,放射性物質發(fā)生泄漏恼琼。R本人自食惡果不足惜妨蛹,卻給世界環(huán)境...
    茶點故事閱讀 39,988評論 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望晴竞。 院中可真熱鬧蛙卤,春花似錦、人聲如沸噩死。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,778評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽已维。三九已至行嗤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間垛耳,已是汗流浹背栅屏。 一陣腳步聲響...
    開封第一講書人閱讀 32,007評論 1 266
  • 我被黑心中介騙來泰國打工飘千, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人栈雳。 一個月前我還...
    沈念sama閱讀 46,427評論 2 360
  • 正文 我出身青樓护奈,卻偏偏與公主長得像,于是被迫代替她去往敵國和親哥纫。 傳聞我的和親對象是個殘疾皇子逆济,可洞房花燭夜當晚...
    茶點故事閱讀 43,580評論 2 349

推薦閱讀更多精彩內容