Comment faire pour rediriger la sortie standard d'un processus secondaire?
def StartProc(dir, parm):
global proc
proc_log = open(dir + os.sep + "MyLog.txt","w") #new path for each file
if parm:
proc = subprocess.Popen(path, 0, None, subprocess.PIPE, proc_log, None)
else:
MyReset(proc) #reset the process(proc) to its default values
proc.stdout = proc_log #no effect
print "fptr ", proc.stdout
#endif
#enddef
prm = True
for i in range(0, 5):
StartProc(i, prm)
prm = False
#endfor
Ce que je veux faire est de lancer un exécutable qu'une seule fois, mais à chaque itération, je veux rediriger la sortie vers un fichier différent. Ce qui se passe, c'est que les fichiers sont créés dans le chemin d'accès différent, mais la sortie est redirigée vers le fichier qui est créé première fois.
Remarque: MyReset()
initialise le processus (exécutable) à ses valeurs par défaut après la première itération.
La ligne suivante à modifier le processus stdout à nouveau fichier?
proc.stdout = proc_log
Vous devez vous connecter pour publier un commentaire.
Comme détendez-vous dit, vous ne pouvez pas changer le descripteur de fichier que le processus de l'enfant est l'écriture de sa sortie.
Ce que vous pouvez faire est de lire la sortie de l'enfant du processus dans votre script python et puis l'écrire dans le fichier que vous voulez. E. g.:
Obivously, vous aurez besoin de comprendre comment le contrôle doit se comporter dans votre application, c'est à dire que vous pouvez faire de l'écriture du thread principal, quand doit le thread principal retour de
StartProc()
dans ce cas, ou que vous avez à faire de l'écriture à partir d'un autre thread, de sorte que le thread principal peut renvoyer à partir deStartProc()
immédiatement.Vous ne pouvez pas. Une fois que le processus est lancé, son stdout est rien que vous pouvez modifier à partir de l'extérieur. Vous devez obtenir à l'intérieur de ce processus " d'espace pour la boue avec ses descripteurs de fichiers.
Si vous avez un moyen (dans
MyReset()
je suppose) pour dialoguer avec le processus en cours d'exécution, vous pouvez peut-être ingénieur pour passer un nouveau nom de fichier pour (ré)ouvrir comme son stdout, de cette façon.Il y a de subtiles problèmes/bugs en python liées à la sous-processus.PIPE:
http://bugs.python.org/issue1652
Apparemment, cela a été corrigé dans python3+, mais pas dans python 2.7 et plus. Pour cela, vous devez utiliser:
code.google.com/p/python-subprocess32/