Ce script vérifie un fichier FTP et télécharge des fichiers à intervalles réguliers.Le signal traité en Python provoque l'interruption de la connexion FTP
En lui envoyant le bon signal (SIGUSR1) devrait le faire fermer gracieusement, en attendant checkAll pour terminer, si en cours d'exécution.
class ScheduledFtpCheck(FtpCheck, Scheduler):
def __init__(self):
...
self.aborted, self.checking = False, False
def abort(self, *args, **kwargs):
self.aborted = True
if not self.checking: self.quit()
def checkAll(self):
if not self.isAborted():
self.checking = True
self.checkAll()
self.checking = False
if self.aborted: self.quit()
...
def main():
sch = ScheduledFtpCheck()
signal.signal(signal.SIGUSR1, sch.abort)
sch.start()
le problème est que je reçois un appel système Interrupted qui rend la sortie ftplib.FTP prématurément:
Traceback (most recent call last):
File "/root/my-applications/sensor/sensor/lib/importutils2.py", line 137, in connectAndCheckAll
try: self.checkAll()
...
File "/usr/lib/python2.6/ftplib.py", line 182, in getline
line = self.file.readline()
File "/usr/lib/python2.6/socket.py", line 406, in readline
data = self._sock.recv(self._rbufsize)
error: [Errno 4] Interrupted system call
Donc gère mon script correctement, mais le signal programmé contrôle ne.
Pourquoi? Comment puis-je l'empêcher?
Merci pour votre soutien