osa1 feed

Nautilus için FTP upload scripti

August 28, 2010 - Tagged as: python, tr.

30-08-2010. Biraz daha geliştirdim, artık eğer bilgisayarınızda pynotify kuruluysa(eğer nautilus kullanıyorsanız büyük ihtimalle gnome kullanıyorsunuzdur, dolayısıyla sorun yok) script çalışmaya başladığında ve çalışmayı bitirdiğinde bir uyarı veriyor(kaç dosya upload ettiği yazıyor). Arkaplanda ne olduğunu göremesek de, hiç yoktan iyidir.
Upload bitti!

“Upload bitti!”

Nautilus scriptleri işimi acayip kolaylaştırıyor, yazımı da çok kolay, bir gün içerisinde bir şeyi birden fazla kez yapıyorsam, o işlemi nautilus scripti aracılığıyla yapmaya çalışıyorum artık. Python ile tabii ki..

Bu seferki seçtiğiniz dosyaları(veya klasörleri)(birden fazla seçebilirsiniz), FTP sunucunuzda belirttiğiniz klasöre gönderiyor. Harici bir kütüphane kullanmadım, FTP işlemleri için ftplib kullandım. ftplib neredeyse bir kütüphane değil istemci, çok basit birkaç komutla her işinizi halledebilirsiniz.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import ftplib, os, sys
try:
    import pynotify
except ImportError:
    uyar = False
else:
    uyar = True
sayac = 0
# Debug icin, silinebilir
# sys.stderr = open('/home/osa1/Desktop/stderr.txt', 'w')
# sys.stdout = open('/home/osa1/Desktop/stdout.txt', 'w')
ftp = ftplib.FTP('ftp sunucunuz')
ftp.login(user='kullanici adiniz', passwd='sifreniz')
yerler = [f.strip() for f in os.environ['NAUTILUS_SCRIPT_SELECTED_URIS'].split('file://') if len(f) > 0]

def gonder(local, baslangic='/media'): # upload edilecek klasor
    global sayac
    if os.path.isdir(local):
        basename = os.path.basename(local)
        sunucuKlasor = '%s/%s' % (baslangic, basename)
        
        try:
            ftp.mkd(sunucuKlasor)
        except ftplib.error_perm:
            pass
        
        for dosya in os.listdir(local):
            localYeni = '%s/%s' % (local, dosya)
            gonder(localYeni, baslangic=sunucuKlasor)
    else:
        dosyalar = ftp.nlst(baslangic)
        if os.path.basename(local) in baslangic:
            ftp.delete(os.path.basename(local))
        ftp.storbinary('STOR %s/%s' % (baslangic, os.path.basename(local)),
                       open(local, 'rb'))
        sayac += 1

if uyar:
    n = pynotify.Notification("Upload basladi",
                              "%s dosya ve/veya klasor" % len(yerler))
    n.show()
for yer in yerler:
    gonder(yer)
if uyar:
    n = pynotify.Notification("Upload bitti",
                              "%s dosya upload edildi" % sayac,
                              "gnome-netstatus-txrx")
    n.show()
ftp.close()