Bonjour,
Je tente de faire un programme ayant pour but de prendre un argument au lancement du programme dans le but de l'utiliser dans une fonction pour lancer un mini timer sur celui-ci.
Je montre ici le lancement de la fonction qui va permettre de prendre l'argument au lancement du programme :
A partir de ca je fais une seconde fonction qui va lancer le timer en quelques sortes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 def main(argv): try: opts, args = getopt.getopt(argv,"t:",["times="]) except getopt.GetoptError: print 'try.py -t <en secondes>' sys.exit(2) for opt, arg in opts: if opt == '-t' : times = arg
Enfin je lance le core programme avec ca :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 def timerkill() : print "Launche proc2" print times time.sleep(times) print "Fin de proc2" proc_1.terminate()
Je sais que la dernière partie est pas super propre mais je n'ai pas réussis à faire en sorte d'obtenir au minimum le timer lancé si je ne fabrique pas la variable times je me retrouve avec une erreur(indiquant que la variable times n'existe pas) donc j'ai fais ainsi.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 if __name__ == "__main__": main(sys.argv[1:]) times = sys.argv[2] print times
Dans l’extrême je vais mettre ici le programme entier pour comprendre si une erreur pourrait venir d'autre chose :
Alors pour faire simple le programme est supposé agir comme un serveur d'écoute qui va récupéré un ping et lorsque ce ping est détécté un timer est lancé avec la durée de l'argument au lancement du programme .
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
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 #!/usr/bin/python import socket import multiprocessing import time import sys,getopt #import signal def main(argv): try: opts, args = getopt.getopt(argv,"t:",["times="]) except getopt.GetoptError: print 'try.py -t <en secondes>' sys.exit(2) for opt, arg in opts: if opt == '-t' : times = arg #def ctrlc_handler(signum, frm) : # print "Attendez la fin du timer." def listen() : while 1 : data = sock.recv(1024) ip_header = data[:20] ips = ip_header[-8:-4] source = '%i.%i.%i.%i' % (ord(ips[0]), ord(ips[1]), ord(ips[2]), ord(ips[3])) print 'Ping from %s' % source def timerkill() : print "Launche proc2" print times time.sleep(times) print "Fin de proc2" proc_1.terminate() host = '' if __name__ == "__main__": main(sys.argv[1:]) times = sys.argv[2] print times sock = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_ICMP) sock.bind((host, 1)) threads = [] # print "Installing signal handler...." # signal.signal(signal.SIGINT, ctrlc_handler) proc_1 = multiprocessing.Process(name ='listen', target = listen) proc_2 = multiprocessing.Process(name='timerkill', target = timerkill) proc_1.start() proc_2.start()
Lorsque je lance celui-ci sans le timer je n'ai aucun soucis mais lorsque je demande l'argument pour un timer spécifique je me retrouve avec une erreur m'indiquant :
Qu'en gros il faut que times soit une variable de type de float ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 time.sleep(times) TypeError: a float is required
Je suis un peu perdu si jamais quelqu'un aurait une idée pour m'aider. Merci d'avance.
Ps : Ne pas prendre en compte la fonction ayant pour but d'empecher l’interruption du programme avec ctrl+c
Partager