| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 126
 127
 128
 129
 130
 131
 132
 133
 134
 135
 136
 137
 138
 139
 140
 141
 142
 143
 144
 145
 146
 147
 148
 149
 150
 151
 152
 153
 154
 155
 156
 157
 158
 159
 160
 161
 162
 163
 164
 165
 166
 167
 168
 169
 170
 171
 172
 173
 174
 175
 176
 177
 178
 179
 180
 181
 
 | #!/usr/bin/env python
#
#
#
# lanceurpython.py : Selection automatique de la version de python suivant
# l'entete du script
#
from sys import argv
from os.path import split
from os import system, chdir, linesep
from string import lower
from Tkinter import *
from platform import system as SystemOS
 
def Lance_Python():
    if SystemOS() == 'Windows':
        pythonpath=={'24':'C:\\Python24\\python.exe','26':'C:\\Python26\\python.exe','31':'C:\\Python31\\python.exe'}
    elif SystemOS() == 'Linux':
        pythonpath={'24':'/usr/bin/python2.4','26':'/usr/bin/python2.6','31':'/usr/bin/python3.0'}
    elif SystemOS == 'Darwin':
        pythonpath={'24':'/usr/local/bin/python','26':'/usr/local/bin/python','31':'/usr/local/bin/python'}
        # ?
    else:
        print 'Systeme non pris en charge'
        quit()
    if _path: chdir(_path)
    print 'lanceurpython.py :'
    if not version:
        print "Pas d'indication"
        print 'Lancement de',_file,'avec Python2.6'
        if Arguments: print 'Avec pour arguments', Arguments
        system(pythonpath['26']+' '+_file + ' ' + Arguments)
    else:
        print 'Le script contient :', Pseudo_Trouve
        print 'Lancement de',_file,'avec Python', version
        if Arguments and len(Arguments) > 0: print 'Avec pour arguments', Arguments
        system(pythonpath[version]+' '+_file + ' ' + Arguments)
    quit()
 
def Verif_Version():
    _fin=open(filename,'r')
    c=0
    version=None
    for line in _fin.readlines():
        if c==0:
            if line[0:22] == '#!/usr/bin/env python3' or line[0:18] == '#!/usr/bin/python3' or line[0:24] == '#!/usr/local/bin/python3':
                version='31'
                Pseudo_Trouve = "python3"
                break
            elif line[0:24] == '#!/usr/bin/env python2.6' or line[0:20] == '#!/usr/bin/python2.6' or line[0:26] == '#!/usr/local/bin/python2.6':
                version='26'
                Pseudo_Trouve = "python2.6"
                break
            elif line[0:24] == '#!/usr/bin/env python2.4' or line[0:20] == '#!/usr/bin/python2.4' or line[0:26] == '#!/usr/local/bin/python2.4':
                version='24'
                Pseudo_Trouve = "python2.4"
                break
            elif line[0:21] == '#!/usr/bin/env python' or line[0:17] == '#!/usr/bin/python' or line[0:23] == '#!/usr/local/bin/python':
                version='26'
                Pseudo_Trouve = "python"
                break
        elif line.startswith('#v:'):
            version=line[3:5]
            Pseudo_Trouve = '#v:' + version
            break
        if c>=5: break
        c += 1
    _fin.close()
    del c
    return version, Pseudo_Trouve
 
def En_Graphique():
 
    def Check24_Checkbutton_IntVar_Callback(varName, index, mode):
        if Check24_Checkbutton_IntVar.get() == 1:
            Check26_Checkbutton_IntVar.set(0)
            Check31_Checkbutton_IntVar.set(0)
        Verif_Choix()
 
    def Check26_Checkbutton_IntVar_Callback(varName, index, mode):
        if Check26_Checkbutton_IntVar.get() == 1:
            Check31_Checkbutton_IntVar.set(0)
            Check24_Checkbutton_IntVar.set(0)
        Verif_Choix()
 
    def Check31_Checkbutton_IntVar_Callback(varName, index, mode):
        if Check31_Checkbutton_IntVar.get() == 1:
            Check24_Checkbutton_IntVar.set(0)
            Check26_Checkbutton_IntVar.set(0)
        Verif_Choix()
 
    def Verif_Choix(event = None):
        if Check31_Checkbutton_IntVar.get() == 0 and Check24_Checkbutton_IntVar.get() == 0 and Check26_Checkbutton_IntVar.get() == 0:
            Check26_Checkbutton_IntVar.set(1)
 
    def scrolle(*args):
       if args[0]=='scroll':
          Options.xview_scroll(args[1],args[2])
       if args[0]=='moveto':
          Options.xview_moveto(args[1])
 
    def Valide_Lance():
        global version
        if len(Options.get()) > 0:
            global Arguments
            Arguments=' '+Options.get()
        if Check24_Checkbutton_IntVar.get() == 1:
            version='24'
        elif Check26_Checkbutton_IntVar.get() == 1:
            version = '26'
        elif Check31_Checkbutton_IntVar.get() == 1:
            version = '31'
        Lance_Python()
 
    fenask = Tk()
    fenask.geometry("%dx%d+%d+%d" % (300,400, (fenask.winfo_screenwidth()-300)/2, (fenask.winfo_screenheight()-400)/2 ) )
    fenask.resizable(False,False)
    Conteneur = Frame(fenask, bd=1, relief=SUNKEN)
    Conteneur.pack(side=TOP, fill=X, padx=5, pady=8)
    Label(Conteneur, fg='dark slate blue', text = 'Lancement du script :'+linesep+linesep+filename).pack(side=TOP, pady=10) 
    Frame(Conteneur, height=2, bd=1, relief=SUNKEN).pack(side=TOP, fill=X, padx=5, pady=8)
    Label(Conteneur, fg='dark slate blue', text = 'Version de Python pour ce script :').pack(side=TOP, pady=10)
    Check24_Checkbutton = Checkbutton(Conteneur, fg='dark slate blue', activeforeground='#2a7aff', text=' Python 2.4', relief="flat")
    Check24_Checkbutton.pack(side=TOP, pady=5)
    Check24_Checkbutton_IntVar = IntVar()
    Check24_Checkbutton.configure(variable = Check24_Checkbutton_IntVar, onvalue=1, offvalue=0)
    Check24_Checkbutton_IntVar_traceName = Check24_Checkbutton_IntVar.trace_variable("w",  Check24_Checkbutton_IntVar_Callback)
    Check26_Checkbutton = Checkbutton(Conteneur, fg='dark slate blue', activeforeground='#2a7aff', text=' Python 2.6', relief="flat")
    Check26_Checkbutton.pack(side=TOP, pady=5)
    Check26_Checkbutton_IntVar = IntVar()
    Check26_Checkbutton.configure(variable = Check26_Checkbutton_IntVar, onvalue=1, offvalue=0)
    Check26_Checkbutton_IntVar_traceName = Check26_Checkbutton_IntVar.trace_variable("w",  Check26_Checkbutton_IntVar_Callback)
    Check31_Checkbutton = Checkbutton(Conteneur, fg='dark slate blue', activeforeground='#2a7aff', text=' Python 3.1', relief="flat")
    Check31_Checkbutton.pack(side=TOP, pady=5)
    Check31_Checkbutton_IntVar = IntVar()
    Check31_Checkbutton.configure(variable = Check31_Checkbutton_IntVar, onvalue=1, offvalue=0)
    Check31_Checkbutton_IntVar_traceName = Check31_Checkbutton_IntVar.trace_variable("w",  Check31_Checkbutton_IntVar_Callback)
    if version == '24': Check24_Checkbutton_IntVar.set(1)
    elif version == '26': Check26_Checkbutton_IntVar.set(1)
    elif version == '31': Check31_Checkbutton_IntVar.set(1)
    Frame(Conteneur, height=2, bd=1, relief=SUNKEN).pack(side=TOP, fill=X, padx=5, pady=8)
    Label(Conteneur, fg='dark slate blue', text = 'Arguments de la ligne de commande :').pack(side=TOP, pady=10)
    scr = Scrollbar(Conteneur, orient=HORIZONTAL, command = scrolle)
    Options = Entry(Conteneur, fg='#2a7aff', xscrollcommand = scr.set)
    Options.pack(side=TOP, fill=X, padx=10)
    scr.pack(side=TOP, fill=X, padx=10, pady=1)
    Options.insert(0, Arguments[1:])
    Frame(Conteneur, height=2, bd=1, relief=SUNKEN).pack(side=TOP, fill=X, padx=5, pady=8)
    Button(Conteneur, text='Lancement du script', fg='dark slate blue', command=Valide_Lance).pack(side=LEFT, padx=5, pady=10)
    Button(Conteneur, text='Quitter', fg='dark slate blue', command=quit).pack(side=RIGHT, padx=5, pady=10)
    fenask.mainloop()
 
Arguments = ''
if len(argv) < 2:
    print 'Usage:'
    print 'python <nomduscript.py> <argumentsoptionnels>'
    print 'Ou pour un usage graphique:'
    print 'python v <nomduscript.py> <argumentsoptionnels>'
    quit()
elif len(argv) == 2:
    filename=argv[1]
else:
    if argv[1].lower() == 'v':
        filename=argv[2]
        listeargs = 3
    else:
        filename=argv[1]
        listeargs = 2
    while listeargs < len(argv):
        Arguments = Arguments + ' ' + argv[listeargs]
        listeargs = listeargs + 1
 
if filename[-2:].lower() != 'py' and filename[-3:].lower() != 'pyc':
    print 'Donnez un script python en argument'
    quit()
 
_path, _file=split(filename)
version, Pseudo_Trouve=Verif_Version()
 
if filename == argv[1]: Lance_Python()
else: En_Graphique() | 
Partager