分页: 1 / 1

求人改写 python 脚本至 perl 脚本

发表于 : 2010-09-16 15:08
xiooli
RT
有一台恐龙级的工作站(win nt)的,死活装不上 python,不过上面有 perl,请大虾帮忙改一下下面这个脚本 :em06 :
其主要功能是监视某目录,若有新添加的文件则上传到 ftp 服务器上去

[python]
#!/usr/bin/python
# -*- coding: utf-8 -*-
# Name: ftp_auto_upload.py
# Author: xiooli <xioooli[at]yahoo.com.cn>
# Site: http://joolix.com
# Licence: GPLv3
# Version: 100915

'''monitor a paticular dir and automatically upload the new added files in the dir to a ftp server.'''

import os, time, threading, platform
from ftplib import FTP
path_to_watch = "."
before = dict ([(f, None) for f in os.listdir (path_to_watch)])
# in seconds
watch_gap = 5
wait_file_time = 10
log_file = './log.txt'
ftp_server = 'your_ftp_server'
ftp_data_dir = 'ftp_uploads'
ftp_user = 'your_ftp_user'
ftp_passwd = 'your_ftp_password'

def log(info, log_file = log_file):
info = time.strftime('%Y/%m/%d-%H:%M') + ' | ' + str(info) + '\n'
print info
f = open(log_file, 'a')
f.write(info)
f.close()

class ftp_upload(threading.Thread):
def __init__(self, ftp_server, user, passwd, file_name, data_dir, debuglevel = 0, ftp_port = 0):
threading.Thread.__init__(self)
self.ftp = FTP()
self.ftp_server = ftp_server
self.ftp_port = ftp_port
self.ftp_user = user
self.ftp_passwd = passwd
self.file_name = file_name
self.data_dir = data_dir
self.debuglevel = debuglevel
def run(self):
ftp = self.ftp
dirs = []
tmp_func = lambda x: dirs.append(x.split(' ')[-1])
ftp.set_debuglevel(self.debuglevel)
file_handler = open(self.file_name, 'rb')
try:
ftp.connect(self.ftp_server, self.ftp_port)
ftp.login(self.ftp_user, self.ftp_passwd)
ftp.cwd(self.data_dir)
ftp.dir(tmp_func)
dirname = os.path.abspath(path_to_watch).split(os.path.sep)[-1]
if dirname:
savedir = dirname
if platform.system() == 'Windows':
savedir = dirname.decode('GBK').encode('UTF-8')
if not savedir in dirs:
ftp.mkd(savedir)
ftp.cwd(savedir)
bufsize = 1024
log('STOR ' + self.file_name)
file_name = self.file_name
if platform.system() == 'Windows':
file_name = self.file_name.decode('GBK').encode('UTF-8')
ftp.storbinary('STOR ' + file_name, file_handler, bufsize)
log(' File "%s" uploaded to "%s" successfully!' %(self.file_name,'ftp://%s/%s' %(ftp_server, dirname) ))
except Exception, e:
log(' Uploading failed: ' + str(e))
file_handler.close()
ftp.quit()

if __name__ == '__main__':
while True:
time.sleep (watch_gap)
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:
log("Added: " + ", ".join (added))
time.sleep(wait_file_time)
for file in added:
ftp_upload(ftp_server, ftp_user, ftp_passwd, file, ftp_data_dir).start()
if removed:
log("Removed: " + ", ".join (removed))
before = after
[/python]

Re: 求人改写 python 脚本至 perl 脚本

发表于 : 2010-09-16 19:56
Qunero
不熟悉python~ 飘过~ :em03
用perl 主要处理文件,但你这个不好做!

Re: 求人改写 python 脚本至 perl 脚本

发表于 : 2010-09-16 20:05
xiooli
深情召唤 perl 党 :em03