Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 29/12/2009, à 16:46

UUBBUU_USER

Aide a la réalisation d'un script Python

Merci Pour toutes remarques, corrections ou autres .. au sujet de ce script:

Je  suis  débutant en python ( et en programmation d'ailleurs) .. donc ... soyez indulgents svp !!!
Voiçi déja l'apercu de mes volontés .. sans vraiment être sur des possibilités

Au vu des plusieurs posts sur la commande "python -m  SimpleHTTPServer" .. Je me suis décider a commencer un petit script en python .. afin de réaliser un gui qui permetrait de lancer et gérer la fonction :

MAis  au cours de mes recherches  j'ai découvert pyftplib .. ( http://code.google.com/p/pyftpdlib/)

librairie entièrement dédier a la gestion d'un serveur FTP ...
Il est vrai .. qu'étant une librairie a ajouter ... on perd la simplicité de cette  fameuse commande ...
Mais  a la recherche d'un système de QOS  et divers autre paramètres propre a un ftp ..  cela m'a parut le moyen le plus simple   pour arriver a mes fins sans prise de tête ...
Je vous renvoie au site pour  tous les renseignements  ...

TODO:
1) choisir entre python-notify et notify-bin
2) affiner la fenetre de creation du server
3) creer les def  pour start et stop server dans la class gtk-launcher-server
4) Recup le Pid du server créé
5) lier def start et class server
6) rajouter icone et main
7) creer main avec listing des serveur en routes

||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
scripts trouver  sur la fonction  SIMPLEHTTPSERVER:

import SimpleHTTPServer
import SocketServer

# web server minimal. Les fichiers du serveur sont organisé de manière relatif au répertoire courant.
PORT = 8000

Handler = SimpleHTTPServer.SimpleHTTPRequestHandler

httpd = SocketServer.TCPServer(("", PORT), Handler)

print "serveur sur le port", PORT
httpd.serve_forever()

source du code  : http://www.style-python.eu/Wiki/index.p … HTTPServer.

------------------------------------------------------------------

#!/usr/bin/env python

# -*- coding: utf-8 -*-

import SocketServer

import BaseHTTPServer

import sys, os

import CGIHTTPServer

port = 8000

class ThreadingCGIServer(SocketServer.ThreadingMixIn, BaseHTTPServer.HTTPServer):

    pass

server = ThreadingCGIServer(('', port), CGIHTTPServer.CGIHTTPRequestHandler)

print "Serveur demarre sur le port %s." % port

try:

    while 1:

        sys.stdout.flush()

        server.handle_request()

except KeyboardInterrupt:

    print "Fini !"

( version multithreadé  ??????????)
source :http://www.crashdump.fr/reseaux/serveur … ligne-649/

------------------------------------------------------------------

+ simple .. l'option -m  permetrait a elle seule de spécifier le port :

 python -m SimpleHTTPServer 9000

Par exemple ouvre le serveur sur le port 9000 ....
source : http://www.linuxjournal.com/content/tec … ver-python

possibilité  d'ouvrir plusieurs instances  en modifiant le n° du port .. et le dossier d'ou on lance la commande

------------------------------------------------------------------

Exemple de script similaire mais en ligne de commande  par le célèbre Xyne  mais plus complet  ( password .. utilisateur ... )(http://xyne.archlinux.ca/)
source : http://bbs.archlinux.org/viewtopic.php?id=85751&p=1

------------------------------------------------------------------

Me Manque toujours le moyen de contrôler la bande passante par le PID ou même le Port  ..
Bien que trickle fonctionne .. il serait plus approprié de pouvoir contrôler a la manière de wget ( pour l'upload bien sur )
                                 --------------------------

on peut  créer un fichier index.html  "type" stocké dans le dossier du script , modifiable par l'utilisateur, qui sera copié et supprimé au début et à la fermeture du serveur
oubien créer a la volée ( exemple    source :http://perso.telecom-paristech.fr/~durrieu/utils/ls.py)

#!/usr/bin/python
# -*- coding: latin-1 -*-

# cree un fichier html d'index contenant tous les fichiers d'un repertoire donne. Non recursif.

import string,commands,os

# commands.getouput("ls") récupère le résultat de la commande shell "ls",
# en tant que chaine de caractères "toto\ntiti" par exemple,
# et cette chaine sera découpée en utilisant "\n" comme séparateur
# afin de récupérer les noms des fichiers dans "liste"
# qui est alors un vecteur genre ['toto','titi']

liste=string.split(commands.getoutput("ls"))

file = open('index.html','w')

file.write('This is an index html file automatically generated by a python script. <br>\n\n')


for name in liste :
	file.write('<a href=')
	file.write(name)
	file.write('>')
	file.write(name)
	file.write('</a><br>\n')

Dernière modification par UUBBUU_USER (Le 27/02/2010, à 19:32)


PEACE LOVE UNITY                                                      FREE TIBET

Hors ligne

#2 Le 29/12/2009, à 16:46

UUBBUU_USER

Re : Aide a la réalisation d'un script Python

Lanceur GTK du serveur :

##------------------------------------------------------------------------------------------------------------------------------------
####-----------GTK LAUNCH SERVER------------		        		
class gtk_launch_server ():
	def __init__(self):		
		logINFO('** create window  gtk_launch_server..')
##---------CREATION FENETRE-------------------------------------				
		self.window = gtk.Window()
		self.window.set_title(APP_NAME)
		self.window.set_name("%sWindow" % APP_NAME)
		self.window.set_keep_below(False)
		self.window.set_keep_above(True)
		self.window.set_skip_taskbar_hint(True)		
		self.window.connect("destroy", doquit)
##---------CONTENU-------------------------------		
		# boite generale
		main_box = gtk.VBox(False,4)				
# titre server
		LABEL_ = gtk.Label()
		LABEL_.set_markup("<b>SERVER</b>")		
# SHARE DIRECTORY
		HBOX_server_dir = gtk.HBox(False, 3)		
		LABEL_DIR = gtk.Label("Share-Dir : ")
		self.server_dir = gtk.Entry()
		bt_select_dir = gtk.Button("choose Dir")
		bt_select_dir.connect("clicked", self.dir_chooser)		
		HBOX_server_dir.pack_start(LABEL_DIR)
		HBOX_server_dir.pack_start(self.server_dir)
		HBOX_server_dir.pack_end(bt_select_dir)		
# PORT NUMBER
		HBOX_server_port = gtk.HBox(False, 2)
		LABEL_PORT = gtk.Label("Port-Number : ")
		adj_port = gtk.Adjustment(value=21, lower=0, upper=65535, step_incr=1, page_incr=25, page_size=0)
		server_port = gtk.SpinButton(adjustment=adj_port, climb_rate=0.0, digits=0)
		HBOX_server_port.pack_start(LABEL_PORT)
		HBOX_server_port.pack_start(server_port)				
# UPLOAD LIMIT
		HBOX_upload_limit = gtk.HBox(False, 3)
		LABEL_UPLOAD = gtk.Label("Upload-Limit : ")
		adj_up = gtk.Adjustment(value=30, lower=0, upper=1000, step_incr=1, page_incr=25, page_size=0)
		server_upload_limit = gtk.SpinButton(adjustment=adj_up, climb_rate=0.0, digits=0)
		LABEL_kb_s = gtk.Label(" kb/second")
		HBOX_upload_limit.pack_start(LABEL_UPLOAD)
		HBOX_upload_limit.pack_start(server_upload_limit)
		HBOX_upload_limit.pack_start(LABEL_kb_s)
# DOWNLOAD LIMIT
		HBOX_download_limit = gtk.HBox(False, 3)
		LABEL_DOWNLOAD = gtk.Label("Download-Limit : ")
		adj_dl = gtk.Adjustment(value=30, lower=0, upper=1000, step_incr=1, page_incr=25, page_size=0)
		server_download_limit = gtk.SpinButton(adjustment=adj_dl, climb_rate=0.0, digits=0)
		LABEL_kb_s = gtk.Label(" kb/second")
		HBOX_download_limit.pack_start(LABEL_DOWNLOAD)
		HBOX_download_limit.pack_start(server_download_limit)
		HBOX_download_limit.pack_start(LABEL_kb_s)						
# boite boutons
		HBOX_buttons = gtk.HBox(False, 4)
		bt_start_server = gtk.Button("start server")
		bt_stop_server = gtk.Button("stop server")
		bt_close_launcher = gtk.Button("close launcher")
		bt_close_launcher.connect("clicked", self.close_launcher)
		HBOX_buttons.pack_start(bt_start_server)
		HBOX_buttons.pack_start(bt_stop_server)
		HBOX_buttons.pack_start(bt_close_launcher)		
##----------INIT FENETRE------------------------------------------
		main_box.pack_start(LABEL_)
		main_box.pack_start(HBOX_server_dir)
		main_box.pack_start(HBOX_server_port)
		main_box.pack_start(HBOX_upload_limit)
		main_box.pack_start(HBOX_download_limit)
		main_box.pack_start(HBOX_buttons)
		main_box.show_all()
		self.window.add(main_box)
		self.window.show()
####------------------------------------DEF CHOOSE DIRECTORY		
	def	dir_chooser(self,widget):
		logINFO('** dir_chooser ..')
		dialogue = gtk.FileChooserDialog("Veuillez Choisir un dossier de partage",None,gtk.FILE_CHOOSER_ACTION_OPEN, (gtk.STOCK_OK, gtk.RESPONSE_OK,gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL), None)
		dialogue.set_action(gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER)
		dialogue.set_current_folder(os.environ['HOME'])
		if dialogue.run() == gtk.RESPONSE_OK:
			self.server_dir.set_text(dialogue.get_current_folder())
			print dialogue.get_current_folder()
			dialogue.destroy()
####------------------------------------DEF close Launcher
	def close_launcher(self, widget=None, data=None):
		logINFO('** close launcher ..')
		gtk.main_quit()
####------------------------------------DEF start server
	def start_server_ ():
		logINFO('** start server ..')
####------------------------------------DEF stop server
	def start_server_ ():
		logINFO('** stop server ..')	

#--------------------------------------------------------------------------------------------------------------------------------------------------------------

Dernière modification par UUBBUU_USER (Le 27/02/2010, à 19:46)


PEACE LOVE UNITY                                                      FREE TIBET

Hors ligne

#3 Le 01/01/2010, à 18:57

UUBBUU_USER

Re : Aide a la réalisation d'un script Python

voila le script du server :

		sys.argv = ["pyftpdlib_ftp.py", "-s", self.server_dir, "-p", server_port, "-u", server_upload_limit, "-d", server_download_limit ]
		

		Get_ARGV__ = optparse.OptionParser(usage='Usage: %prog <options> <arg> ..')
#---------------------------GROUP OPTION  CREDIT		
		Get_ARGV__GROUP_CREDIT = optparse.OptionGroup(Get_ARGV__, "CREDIT ", """FTP server base on pyftpdlib
																				  Site Web :http://code.google.com/p/pyftpdlib""")
		Get_ARGV__.add_option_group(Get_ARGV__GROUP_CREDIT)
#---------------------------GROUP OPTION	GENERAL																			  
		Get_ARGV__GROUP_SERVER = optparse.OptionGroup(Get_ARGV__, "GENERAL OPTIONS", "General FTP Options.")																		  																				  
		Get_ARGV__GROUP_SERVER.add_option("-s", dest="SHARE_DIR", default=os.path.expanduser('~'), help="""Share directory 
																						DefaultValue: USER directory""")
		Get_ARGV__GROUP_SERVER.add_option("-p", dest="PORT_NUMBER", default="21", help="""Server Port Number 
																						DefaultValue: %default""")
		Get_ARGV__.add_option_group(Get_ARGV__GROUP_SERVER)
#---------------------------GROUP OPTION	THROTTLED BANDWITCH	
		Get_ARGV__GROUP_SPEED = optparse.OptionGroup(Get_ARGV__, "THROTTLED OPTIONS ","""Upload and Download limit 
																						     Exemple : 30720  = 30 Kb/sec (30 x 1024)""")
		Get_ARGV__GROUP_SPEED.add_option("-u", dest="UP_LIMIT", default="30270", help="""UpStream Limit 
																						DefaultValue: %default""")
		Get_ARGV__GROUP_SPEED.add_option("-d", dest="DOWN_LIMIT", default="30270",help="""DownStream Limit 
																						DefaultValue: %default""")
		Get_ARGV__.add_option_group(Get_ARGV__GROUP_SPEED)
		
		( options, args ) = Get_ARGV__.parse_args()
		
		if len(sys.argv[1:])<1:
			Get_ARGV__.error("Not enought arguments. Try  with  -h  or --help options for more info.")
		
		print	" Server Will be launch With those options : "
		print 	"Share directory :", options.SHARE_DIR
		print 	"Port number :", options.PORT_NUMBER
		print 	"UpStream limit :", options.UP_LIMIT
		print 	"DownStream limit :", options.DOWN_LIMIT
		
		SHARE_DIR = options.SHARE_DIR
		PORT_NUMBER = options.PORT_NUMBER
		UP_LIMIT = options.UP_LIMIT
		DOWN_LIMIT = options.DOWN_LIMIT
		
		
		USER = "user"
		PASSWORD = "password"
		
		#~ # Instantiate a dummy authorizer for managing 'virtual' users
		authorizer = ftpserver.DummyAuthorizer()
		
		#~ # Define a new user having full r/w permissions
		authorizer.add_user(USER, PASSWORD , SHARE_DIR, perm='elradfmw')
		
		#~ # define an anonymous user with  read-only (comment or uncomment)
		authorizer.add_anonymous(SHARE_DIR)
		
		#~ # define bandwitch limit
		dtp_handler = ftpserver.ThrottledDTPHandler
		dtp_handler.read_limit = UP_LIMIT
		dtp_handler.write_limit = DOWN_LIMIT
		
		#~ # Instantiate FTP handler class
		ftp_handler = ftpserver.FTPHandler
		ftp_handler.authorizer = authorizer
		#~ # have the ftp handler use the alternative dtp handler class
		ftp_handler.dtp_handler = dtp_handler
		
		#~ # Instantiate FTP server class and listen to 0.0.0.0:DEFAULT_PORT
		ftpd = ftpserver.FTPServer(('0.0.0.0', PORT_NUMBER), ftp_handler)
		
		#~ # set a limit for connections
		ftpd.max_cons = 256
		ftpd.max_cons_per_ip = 5
		
		ftpd.serve_forever()

Dernière modification par UUBBUU_USER (Le 27/02/2010, à 23:41)


PEACE LOVE UNITY                                                      FREE TIBET

Hors ligne

#4 Le 03/01/2010, à 17:12

l e . n o x

Re : Aide a la réalisation d'un script Python

Bonjour UUBBUU_USER, je m'abonne à ton post wink
Et du coup un petit "UP", bonne continuation ....


Zik Fan : " Vous seul savez mieux que quiconque comment organiser votre bibliothèque musicale ! "

Linux, y a moins bien.
Mais c'est plus cher. ;O)

Hors ligne

#5 Le 04/01/2010, à 15:24

UUBBUU_USER

Re : Aide a la réalisation d'un script Python

j'avance pas a pas et a mon rythme .. merci du soutien   le.nox    ...
Par contre je mets mon script a jour direct en éditant le deuxième message .. donc pas sur qu'il s' up  ou soit vu si façilement .. Remarque abonné  .. tu peux y venir plus facilement .
Sinon A tous  ... toutes remarques, corrections ou conseil sont les bienvenus  ( j'ai quelques erreurs  dans le script )


-------------------------------------------------------------------------------------------------
découvert lors de mes recherches .. nouvelle librairie   :

About

Python FTP server library provides a high-level portable interface to easily write asynchronous FTP servers with Python.
pyftpdlib is currently the most complete RFC-959 FTP server implementation available for Python programming language.
It is used in projects like Google Chromium and Bazaar and included in Linux Fedora and FreeBSD package repositories.

source

possibilité énorme ...  . ptêt  encore mieux que SimpleHTTPServer

Dernière modification par UUBBUU_USER (Le 04/01/2010, à 17:15)


PEACE LOVE UNITY                                                      FREE TIBET

Hors ligne

#6 Le 04/01/2010, à 16:47

ADcomp

Re : Aide a la réalisation d'un script Python

salut ..

Regarde si ces qques lignes peuvent t'aider à avancer ( pas de gestion du serveur )

#!/usr/bin/python
# -*- coding: utf-8 -*-

##
#   This program is distributed under the terms of the GNU General Public License
#   For more info see http://www.gnu.org/licenses/gpl.txt
##

import os

try:
    import gtk
except:
    print("ERROR - Install PyGTK ( GTK+ for Python )")
    exit()

APP_NAME = 'NOM_DU_PROGRAMME'
APP_VERSION = '0.1'
APP_DESC = 'blabla, blbalblallaaa blabla ...'

## True / False ( only for debbuging )
DEBUG=True

def logINFO(msg):
    if DEBUG:
        print("%s - %s" % (APP_NAME, msg))

class App():
    def __init__(self):

        self.hide_me = False
        self.focus_check = False
        self.mode = None

        self.create_window()
        self.create_menu()
        self.create_statusicon()

        self.toggle_hide()

    def create_statusicon(self):
        logINFO('** create_statusicon ..')
        self.statusIcon = gtk.status_icon_new_from_file('monicon2.png')
        self.statusIcon.set_visible(True)
        self.statusIcon.set_tooltip(APP_NAME)
        self.statusIcon.connect('popup-menu', self.status_icon_popup)
        self.statusIcon.connect('activate', self.toggle_hide)

    def create_window(self):
        logINFO('** create_window ..')
        self.window = gtk.Window()
        self.window.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_UTILITY)
        #~ self.window.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_NORMAL)
        self.window.set_title(APP_NAME)
        self.window.set_name("%sWindow" % APP_NAME)
        self.window.stick()
        self.window.set_decorated(False)
        self.window.set_keep_below(False)
        self.window.set_keep_above(True)
        self.window.set_skip_taskbar_hint(True)
        self.window.add_events(gtk.gdk.FOCUS_CHANGE_MASK)

        ## Only if you want to hide when lost focus
        #~ self.window.connect("focus-out-event", self.lost_focus)

        self.window.connect("key-press-event", self.onkeypress)
        self.window.connect("destroy", self.doquit)

        mainbox = gtk.VBox(False, 4)
        bt_box = gtk.HBox(False, 4)

        ## Text
        self.server_dir = gtk.Entry()

        ## Check Box
        self.checkbox = gtk.CheckButton('Check your button !')

        ## SpinButton
        adjustment = gtk.Adjustment(value=0, lower=0, upper=512, step_incr=1, page_incr=10, page_size=0)
        self.spin_bt = gtk.SpinButton(adjustment=adjustment, climb_rate=0.0, digits=0)

        ## Button
        bt_select_dir = gtk.Button(stock=gtk.STOCK_OPEN)
        bt_select_dir.connect("clicked", self.dir_chooser)

        bt_1 = gtk.Button(stock=gtk.STOCK_REFRESH)
        bt_2 = gtk.Button(stock=gtk.STOCK_SAVE)

        bt_quit = gtk.Button(stock=gtk.STOCK_QUIT)
        bt_quit.connect("clicked", self.doquit)

        bt_box.pack_start(bt_select_dir)
        bt_box.pack_start(bt_1)
        bt_box.pack_start(bt_2)
        bt_box.pack_start(bt_quit)

        mainbox.pack_start(self.server_dir)
        mainbox.pack_start(self.checkbox)
        mainbox.pack_start(self.spin_bt)
        mainbox.pack_start(bt_box)

        mainbox.show_all()
        self.window.add(mainbox)

    def create_menu(self):
        logINFO('** create_menu ..')
        self.popupMenu = gtk.Menu()
        #~ menuPopup = gtk.ImageMenuItem(gtk.STOCK_PREFERENCES)
        #~ menuPopup.connect("activate", self.edit_config)
        #~ self.popupMenu.add(menuPopup)
        menuPopup = gtk.ImageMenuItem (gtk.STOCK_ABOUT)
        menuPopup.connect("activate", self.show_about_dialog)
        self.popupMenu.add(menuPopup)
        menuPopup = gtk.ImageMenuItem(gtk.STOCK_QUIT)
        menuPopup.connect("activate", self.doquit)
        self.popupMenu.add(menuPopup)
        self.popupMenu.show_all()

    def show_window(self, mode=None):
        logINFO('** show_window ..')
        screen_width, screen_height = gtk.gdk.screen_width(), gtk.gdk.screen_height()
        w_width , w_height = self.window.get_size()

        (screen, rect, orientation) = self.statusIcon.get_geometry()
        if rect[0] + w_width > screen_width:
            x = screen_width - w_width
        else:
            x = rect[0] + w_width
        y = rect[1]+rect[3]

        self.window.move(x, y)

    def doquit(self, widget=None, data=None):
        logINFO('** doquit ..')
        gtk.main_quit()

    def run(self):
        logINFO('** run ..')
        gtk.main()

    def dir_chooser(self, widget):
        logINFO('** dir_chooser ..')
        dialogue = gtk.FileChooserDialog("Veuillez Choisir un dossier de partage",None,gtk.FILE_CHOOSER_ACTION_OPEN,(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,gtk.STOCK_OPEN, gtk.RESPONSE_OK))
        dialogue.set_action(gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER)
        dialogue.set_current_folder(os.environ['HOME'])

        if dialogue.run() == gtk.RESPONSE_OK:
            self.server_dir.set_text(dialogue.get_current_folder())
            dialogue.destroy()

    def toggle_hide(self, widget=None, event=None):
        logINFO('** toggle_hide ..')
        if self.hide_me:
            self.hide_me = False
            self.show_window()
            self.window.show()
            self.focus_check = True
        else:
            self.hide_me = True
            self.focus_check = False
            self.window.hide()

    def lost_focus(self, widget, event):
        if self.focus_check:
            self.toggle_hide()

    def onkeypress(self, widget, event):
        if event.keyval == gtk.keysyms.Escape:
            self.toggle_hide()

    def status_icon_popup(self, widget, button, active_time):
        logINFO('** status_icon_popup ..')
        self.popupMenu.popup(None, None, None, 1, 0)

    def show_about_dialog(self, widget, data=None):
        about = gtk.AboutDialog()
        about.set_icon_from_file('monicon2.png')
        about.set_program_name(APP_NAME)
        about.set_version(APP_VERSION)
        #~ about.set_authors(['', ''])
        #~ about.set_logo()
        about.set_website('htt://www.mon_site.com')
        about.set_comments(APP_DESC)
        about.run()
        about.destroy()

if __name__ == "__main__":
        ## need to change directory
        SRC_PATH = os.path.dirname(os.path.realpath( __file__ ))
        os.chdir(SRC_PATH)

        app = App()
        app.run()

David [aka] ADcomp

Hors ligne

#7 Le 04/01/2010, à 18:43

UUBBUU_USER

Re : Aide a la réalisation d'un script Python

@ ADcomp .. Pour sur  ça m'aide ..... clair ... explicite ...  !!
j'ai encore pas mal de truc a apprendre ...  pour sur je vai m'en inspirer et pomper des truc de-dans ^^
Rien que le truc pour DEBUG  .. moi c'est a coup de [print "tadan "]et [print "pouett"] ..  ..

sinon au sujet de pyftpdlib .. ça m'a l'air vraiment bien .... et beaucoup mieux ..

suffit d'installer   

sudo aptitude install python-setuptools

ensuite  installer la librairie

sudo easy_install.py pyftpdlib

et pour le lancer .. idem  :

sudo python -m pyftpdlib.ftpserver

et voila les caracteristiques  ( cité sur le site )

Features

    * Support for recent FTP commands like MLSD and MLST (RFC-3659).
    * Support for FTPS (FTP over TLS/SSL, still experimental and provided as a demo script). New in 0.5.1
    * Support for FXP, site-to-site transfers.
    * Support for IPv6 (RFC-2428).
    * NAT/Firewall support with PASV/EPSV passive mode connections.
    * Bandwidth throttling. New in 0.5.2
    * Support for resumed transfers.
    * Per-user permissions configurability.
    * Maximum connections limit.
    * Per-source-IP limits.
    * Configurable idle timeouts for both control and data channels.
    * Compact: the entire library is distributed in a single file (ftpserver.py).
    * High portability:
          o Entirely written in pure Python, no third party modules are used. It works on any system where select( ) or poll( ) is available.
          o Extremely flexible system of "authorizers" able to manage both "virtual" and "real" users on different platforms (Windows, UNIX, OS X).
          o Works with Python 2.3, 2.4, 2.5 and 2.6.

Dernière modification par UUBBUU_USER (Le 04/01/2010, à 22:23)


PEACE LOVE UNITY                                                      FREE TIBET

Hors ligne

#8 Le 21/01/2010, à 16:05

UUBBUU_USER

Re : Aide a la réalisation d'un script Python

j'up  le post juste histoire de montrer que je suis toujours dessus ...  j'ai fait quelques test de transfert simultané .
la première version sortira jpense avec le module SimpleHTTPServer .. Quoiqu'  il faudrait que je me lance dans le test avec pyftpdlib.
Sinon Adcomp m'a vraiment Macher le boulot .. Vraiment Cool de sa part ^^

ps ... j'ai un script bash méteo en route  depuis pas mal de temps ... je l'es repris l'autre jour ayant eu une idée géniale ... (:cool: smile )

a plus tard )


PEACE LOVE UNITY                                                      FREE TIBET

Hors ligne

#9 Le 21/02/2010, à 02:09

UUBBUU_USER

Re : Aide a la réalisation d'un script Python

je reviens a votre sciences ...
j'aimerais comprendre mon erreur , voila j'essaye de mettre un système d'argument pour le script .... mais je bloque ... car quoique j'écrive .. ça ne prend pas en compte les arguments  ..

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# $Id$

"""FTP server base on pyftpdlib	(Site Web :http://code.google.com/p/pyftpdlib)

Usage:
	nomduscript.py [options]

Defaults value :
	Server port (21)
	Server UP/DOWN bandwitch limit (30720)  [30 Kb/sec (30 * 1024) )]

Options:
	-h, --help			Print this help
	-p, --port <xxxx>		Port Number
	-u, --upload <xxxx>		Upload Limit
	-d, --download <xxxx>	        Download Limit"""

import os
import getopt, sys
from pyftpdlib import ftpserver

def helpINFO():
	print __doc__


class main__ ():
	# simulate command line invocation
		sys.argv = ["pyftpdlib_ftp.py", "-drp", "/home", "21"]
		DEFAULT_PORT = 21
		UP_LIMIT = 30720
		DOWN_LIMIT = 30720
		USER = 'user'
		PASSWORD = 'password'
		SHARE_DIR = os.getcwd()
		try:
			options, arguments = getopt.getopt(sys.argv[1], "hdr:p:", ["help", "default", "repertoire=", "port=", "speed-upload=", "speed-download="])			
			for opt, arg in options:
				if opt in ("-h", "--help"):
					print("printing help")
					helpINFO()
				elif opt in ("-d", "--default"):
					print("Normal Value")
				elif opt in ("--repertoire"):
					print("repertoire = ")
					SHARE_DIR = arg								
				elif opt in ("-p", "--port"):
					print("port n° = ")
					DEFAULT_PORT = arg
				elif opt in ("-u", "--upload"):
					print("upload limit = ")
					UP_LIMIT = arg
				elif opt in ("-d", "--download"):
					print("download limit = ")
					DOWN_LIMIT = arg
		except:
			helpINFO()
			sys.exit(2)
			
			
		print 	DEFAULT_PORT
		print	UP_LIMIT
		print	DOWN_LIMIT
		print	USER
		print	PASSWORD
		print   SHARE_DIR
if __name__ == "__main__":
	 main__()

merci d'avance pour les corrections ... oubien .. les remarques ))

Dernière modification par UUBBUU_USER (Le 21/02/2010, à 02:10)


PEACE LOVE UNITY                                                      FREE TIBET

Hors ligne

#10 Le 21/02/2010, à 18:52

magestik

Re : Aide a la réalisation d'un script Python

options, arguments = getopt.getopt(sys.argv[1], "hdr:p:", ["help", "default", "repertoire=", "port=", "speed-upload=", "speed-download="])

le problème ça doit être : "sys.argv[1]". T'as essayé de mettre juste sys.argv ou juste argv ?

Hors ligne

#11 Le 21/02/2010, à 19:50

UUBBUU_USER

Re : Aide a la réalisation d'un script Python

Salut Magestik .. vi aprés retest .. ça ne change rien .....
si jamais je change en sys.argv ou ça ne fonctionne pas .. ( ça renvoie les valeurs par défauts ) .. et lorsque je mets argv   ça m'affiche l'aide ..
Après peut-être que la ligne pour test n'est pas bonne ..

sys.argv = ["pyftpdlib_ftp.py", "-drp", "/home", "21"]

j'ai tester également en mettant

sys.argv = ["pyftpdlib_ftp.py", "-r", "/home", "-p", "21"]

Sans réel succés ..
Dur dur les arguments en python neutral


PEACE LOVE UNITY                                                      FREE TIBET

Hors ligne

#12 Le 21/02/2010, à 20:05

magestik

Re : Aide a la réalisation d'un script Python

Au début c'est assez chiant. Mais tu as essayé de le faire comme en vrai ?
En gros pas simuler des arguments mais les passer en vrai ?

Hors ligne

#13 Le 21/02/2010, à 21:18

UUBBUU_USER

Re : Aide a la réalisation d'un script Python

j'ai essayer en vrai au départ . Mais alors que mes résultats était infructueux .et ne sachant pas vraiment comment faire ... j'ai trouver cette astuce en piannotant sur le web ...
a la recherche d'info sur getopt ...
A mon avis ... je fait erreur car j'essaye d'intégrer trop de paramètre d'un seul coup ..
Ptêt que ma déclaration :

options, arguments = getopt.getopt(sys.argv[1], "hdr:p:", ["help", "default", "repertoire=", "port=", "speed-upload=", "speed-download="])

n'est pas bonne ..


PEACE LOVE UNITY                                                      FREE TIBET

Hors ligne

#14 Le 21/02/2010, à 22:39

magestik

Re : Aide a la réalisation d'un script Python

options, arguments = getopt.getopt(sys.argv[1], "hdr:p:", ["help", "default", "repertoire=", "port=", "speed-upload=", "speed-download="])

Pour moi c'est sur que "sys.argv[1]" est faux. Peut-être que je me trompe maisla tu prends que le [1] ... Vire le "[1]" pour commencer.

J'utilise getopt dans mon prog python et voilà ce que j'ai fait :

if len(sys.argv)>1: # Il y a (au moins) un argument
try:
	opts, args = getopt.getopt(argv, "hf:", ["help", "file="])
	for opt, arg in opts: # Traitement des parametres
		if opt in ("-h", "--help"):
			usage()
			sys.exit()
		elif opt in ("-f", "--file"):
			fopen = arg

except getopt.GetoptError:
	print "No arg"
	if sys.argv[1][0] == "/": # Cas du lancement auto
		fopen = sys.argv[1]
	else:
		usage()
		sys.exit(2)

Sinon j'avais aussi remarqué un problème dans ton truc. Il y a plus de nom long que de nom court. Regarde :
h -> help
d -> default
r: -> repertoire=
p: -> port=

Et après ?
? -> speed-upload=
? -> speed-download=


J'espèere que mon message t'aidera.

Hors ligne

#15 Le 21/02/2010, à 23:18

UUBBUU_USER

Re : Aide a la réalisation d'un script Python

Ah ... j'pensais que l'on pouvais avoir des noms longs sans version courtes .....
Sinon .. dans ton exemple  tu a qu'un seul paramètre .... Moi il faut que j'en passe  7 au minimun ..( spécifier ou pas le port du serveur  .. le répèrtoire a partager .... et encore pour l'instant j'ai pas tout mis ...
D'ou peut-être la complication et les erreurs ....
jvai tester en mettant autant de noms longs et cours ..

edit :  .. tin ya plein d'erreur sur mon script ) ..
voila MAJ  :

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# $Id$

"""FTP server base on pyftpdlib	(Site Web :http://code.google.com/p/pyftpdlib)

Usage:
	nomduscript.py [options]

Defaults value :
	Server port (21)
	Server UP/DOWN bandwitch limit (30720)  [30 Kb/sec (30 * 1024) )]
	Server share :  current script directory

Options:
	-h, --help			Print this help
	-p, --port <xxxx>		Port Number
	-u, --upload <xxxx>		Upload Limit
	-d, --download <xxxx>	        Download Limit"""

import os
import getopt, sys
from pyftpdlib import ftpserver

def helpINFO():
	print __doc__


class main__ ():
	# simulate command line invocation
		sys.argv = ["pyftpdlib_ftp.py", "-r", "/home", "-p", "21"]
		DEFAULT_PORT = 21
		UP_LIMIT = 30720
		DOWN_LIMIT = 30720
		USER = 'user'
		PASSWORD = 'password'
		SHARE_DIR = os.getcwd()
		try:
			options, arguments = getopt.getopt(sys.argv, "hr:p:u:d:", ["help", "repertoire=", "port=", "upload=", "download="])			
			for opt, arg in options:
				if opt in ("-h", "--help"):
					print("printing help")
					helpINFO()
				elif opt in ("-r", "--repertoire"):
					print("repertoire = ")
					SHARE_DIR = arg								
				elif opt in ("-p", "--port"):
					print("port n° = ")
					DEFAULT_PORT = arg
				elif opt in ("-u", "--upload"):
					print("upload limit = ")
					UP_LIMIT = arg
				elif opt in ("-d", "--download"):
					print("download limit = ")
					DOWN_LIMIT = arg
		except:
			helpINFO()
			sys.exit(2)
			
			
		print 	DEFAULT_PORT
		print	UP_LIMIT
		print	DOWN_LIMIT
		print	USER
		print	PASSWORD
		print   SHARE_DIR

if __name__ == "__main__":
	 main__()

Dernière modification par UUBBUU_USER (Le 21/02/2010, à 23:23)


PEACE LOVE UNITY                                                      FREE TIBET

Hors ligne

#16 Le 22/02/2010, à 14:57

magestik

Re : Aide a la réalisation d'un script Python

Ah désolé je me suis planté.
Essaye avec ça :

sys.argv[1:]

En fait moi j'ai argv parce que je suis à l'interieur d'une fonction que j'ai fait ... et argv est un paramètre qui a pour valeur sys.argv[1:]. Voilà, ça va marcher wink (Enfin ça devrait)

Encore désolé.

Magestik

Hors ligne

#17 Le 22/02/2010, à 20:09

UUBBUU_USER

Re : Aide a la réalisation d'un script Python

Oué .. super magestik ..... ça fonctionne .....  par contre  .. j'aimerais comprendre .. dans le cas d'un argument de script .. il faut utiliser "sys.argv[1:]"   sinon pour une fonction ( au sein d'un script ), afin de récupérer un argument on mets seulement "sys.argv"    ????
Quel est le role de "[1:]"   ??
Mon erreur au début était quand même une grosse boulette .... mettres toutes les options accoller

sys.argv = ["pyftpdlib_ftp.py", "-drp", "/home", "21"]

alors que

sys.argv = ["pyftpdlib_ftp.py", "-r", "/home", "-p", "21"]

est quand même mieux..
A moins qu'il soit possible de décomposer les options ... et en déduire les arguments ..

  mon_script.py  -xyz  arg_x  arg_y  arg_z

options : =>    " -xyz"
arguments : =>  "arg_x"  "arg_y"  "arg_z"

Dernière modification par UUBBUU_USER (Le 22/02/2010, à 20:17)


PEACE LOVE UNITY                                                      FREE TIBET

Hors ligne

#18 Le 22/02/2010, à 20:14

UUBBUU_USER

Re : Aide a la réalisation d'un script Python

Pour ceux qui suivent le topic ... pyftplib est vraiment une chouette librairie ...nécessitant une installation .. . il est vrai ... mais dés lors que je souhaitais contrôler la bande passante ( et vu mon maigre niveau  ) il aurait fallut passer par un paquet tiers ( trickle ) ou bien créer un fichier de "QOS" spécifique ... qui compliquait énormément la tache ... pyftplib ... étant une librairie dédier ... autant l'utiliser ^^ ..


PEACE LOVE UNITY                                                      FREE TIBET

Hors ligne

#19 Le 22/02/2010, à 20:26

Kanor

Re : Aide a la réalisation d'un script Python

Quel est le role de "[1:]"   ??

Tu comprend pas ça oh tu dois avoir du mal avec python
tu peux trouver plus d'info avec le terme slice
mais pour résumer si on a la liste suivante
a = [1,2,3,4,4,3]
le slice marche en comptant à partir de zéro les intevalle dans l'exemple du dessus ça donne
1 est entre 0 et 1
2 est entre 1 et 2
3 est entre 2 et 3 ...
donc si tu veux avoir les 3 premier element tu fais
a[0:3]
dans ton cas le a[1:] permet d'avoir tous les element à partir de l'interval 1 donc ça donne
[2,3,4,4,3]

Tu peux aussi utiliser des chiffre négative par exemple a[1:-1] donne
[2,3,4,4]
il faut seulement compter à partir de la fin
Sinon pour la gestion des argument il faut mieux utiliser cette librairie
http://docs.python.org/library/optparse.html

Hors ligne

#20 Le 22/02/2010, à 20:35

UUBBUU_USER

Re : Aide a la réalisation d'un script Python

... Bien ... clair ..
En effet .. non pas que j'ai du mal .... mais je débute .... (vraiment  débute) .. La seule chose que je savais la dessus c'était que l'argument  1  c'est le nom du script ... ( en shell bash c'est $0 ) ..

Dernière modification par UUBBUU_USER (Le 22/02/2010, à 20:43)


PEACE LOVE UNITY                                                      FREE TIBET

Hors ligne

#21 Le 22/02/2010, à 21:31

magestik

Re : Aide a la réalisation d'un script Python

a = [1,2,3,4,4,3]
a[0] = 1
a[1] = 2
a[2] = 3
...

Et tu peux en prendre plusieurs d'un coups. Donc si tu mets a[1:3] ca prendra la liste de [1] à [3]. Et si tu specifie pas l'argument ca veut dire jusqu'à la fin, comme ça [5:] (ou depuis le début [:3]). Pour l'histoire de sys.argv que je citais plus haut t'emmêle pas avec tu peux pas comprendre sans mon code wink Je m'étais emmêle les pinceaux tongue

Dernière modification par magestik (Le 22/02/2010, à 21:32)

Hors ligne

#22 Le 23/02/2010, à 19:53

UUBBUU_USER

Re : Aide a la réalisation d'un script Python

@ kanor .. en effet .. optparse est   pas mal .... et plus riche en fonctionnalités ..

class main__ ():
		# simulate command line invocation
		sys.argv = ["pyftpdlib_ftp.py","-h"]
		
		Get_ARGV__ = optparse.OptionParser()
		Get_ARGV__GROUP_SERVER = optparse.OptionGroup(Get_ARGV__, "*General	", "General FTP Options.")
		Get_ARGV__GROUP_SERVER.add_option("-s", dest="SHARE_DIR", help="Share directory")
		Get_ARGV__GROUP_SERVER.add_option("-p", dest="PORT_NUMBER", help="Server Port Number")
		Get_ARGV__.add_option_group(Get_ARGV__GROUP_SERVER)
		Get_ARGV__GROUP_SPEED = optparse.OptionGroup(Get_ARGV__, "*BandWitch Limiter	","""Defaults upload and download limit (30720) 
																						     Exemple : 30720  = 30 Kb/sec (30 x 1024)""")
		Get_ARGV__GROUP_SPEED.add_option("-u", dest="UPLOAD_LIMIT", help="UpStream Limit")
		Get_ARGV__GROUP_SPEED.add_option("-d", dest="DOWN_LIMIT", help="DownStream Limit")
		Get_ARGV__.add_option_group(Get_ARGV__GROUP_SPEED)
		options, remainder = Get_ARGV__.parse_args()

Par contre, au niveau de mon projet .... je vais devoir l'utiliser au sein  d'une classe .. et donc appeler et passer les arguments via l'interfaces GUI ( si je coche  repertoire  .. je choisi le repertoire  et lors du lancement du serveur .. je récup les paramètres ... ( j'espère être assez clair .. ) Lors de tes interventions Majestik .... j'ai crus comprendre que les paramètres intra-classes ( !! )  ne serait pas pareil ???????

Dernière modification par UUBBUU_USER (Le 23/02/2010, à 20:04)


PEACE LOVE UNITY                                                      FREE TIBET

Hors ligne

#23 Le 23/02/2010, à 20:01

magestik

Re : Aide a la réalisation d'un script Python

C'est moi qui ai du mal expliquer alors.

Hors ligne

#24 Le 23/02/2010, à 20:05

UUBBUU_USER

Re : Aide a la réalisation d'un script Python

Donc  le passage de paramètres est le même ?????


PEACE LOVE UNITY                                                      FREE TIBET

Hors ligne

#25 Le 23/02/2010, à 21:28

magestik

Re : Aide a la réalisation d'un script Python

Oui wink

Hors ligne