Comment arrêter de python de la propagation des signaux de sous-processus?

Je suis à l'aide de python pour gérer certaines simulations. Je construis les paramètres et exécuter le programme à l'aide de:

pipe = open('/dev/null', 'w')
pid = subprocess.Popen(shlex.split(command), stdout=pipe, stderr=pipe)

Mon code gère les différents signaux. Ctrl+C, arrêter la simulation, demandez si je veux sauver, et se terminer normalement. J'ai d'autres gestionnaires de signaux (pour forcer la sortie de données par exemple).

Ce que je veux, c'est envoyer un signal (SIGINT, Ctrl+C) pour mon script python qui va demander à l'utilisateur quel signal il veut les envoyer au programme.

La seule chose qui empêche que le code fonctionne, c'est qu'il semble que quoi que je fasse, Ctrl+C sera "transféré" à la sous-processus: le code de l'attraper et de sortie:

try:
  <wait for available slots>
except KeyboardInterrupt:
  print "KeyboardInterrupt catched! All simulations are paused. Please choose the signal to send:"
  print "  0: SIGCONT (Continue simulation)"
  print "  1: SIGINT  (Exit and save)"
  [...]
  answer = raw_input()
  pid.send_signal(signal.SIGCONT)
  if   (answer == "0"):
    print "    --> Continuing simulation..."
  elif (answer == "1"):
    print "    --> Exit and save."
    pid.send_signal(signal.SIGINT)
    [...]

Donc quoi que je fasse, le programme reçoit le SIGINT que je ne veux que mon script python pour voir. Comment puis-je faire???

J'ai aussi essayé:

signal.signal(signal.SIGINT, signal.SIG_IGN)
pid = subprocess.Popen(shlex.split(command), stdout=pipe, stderr=pipe)
signal.signal(signal.SIGINT, signal.SIG_DFL)

pour exécuter le programme, mais cela donne le même résultat: le programme des captures du SIGINT.

Merci!

InformationsquelleAutor big_gie | 2010-09-24