2012-12-24 7 views
-1

J'ai un programme principal, dans lequel un utilisateur peut appeler un sous-processus (pour télécharger des fichiers) plusieurs fois. Chaque fois, j'appelle aria2c en utilisant subprocess, et il va imprimer la progression à stdin. Bien sûr, il est souhaitable que l'utilisateur puisse voir la progression de chaque téléchargement séparément. Donc, la question est de savoir comment puis-je rediriger la sortie de chaque processus vers une fenêtre de console séparée?Python: redirige la sortie vers plusieurs consoles?

Répondre

0

Je suis un peu confus. L'utilisation de subprocess.Popen (...) devrait générer une nouvelle invite de commande automatiquement pour chaque appel. Qu'est-ce que aria2c? Est-ce un programme que vous avez écrit en python? Est-ce un exe tiers qui écrit dans la fenêtre d'invite de commande?

Je peux vous aider à rediriger toutes les sorties des sous-processus vers l'invite de commande principale, afin qu'elles puissent être affichées en ligne. En outre, peut-être que vous pouvez donner un peu plus de détails sur ce qui se passe en premier, afin que je puisse comprendre votre problème un peu mieux.

+0

Aria2c est un programme tiers. Il est étrange qu'une seule invite de commande soit ouverte même si subprocess.Popen est appelé plusieurs fois. La commande exacte que j'utilise est "Popen (commande, shell = True)". Et aussi, cela permettra-t-il à plusieurs processus de s'exécuter en même temps (sans attendre la fin de la commande précédente)? – user1865009

+0

Lorsque vous utilisez le sous-processus.Popen, vous pouvez exécuter plusieurs processus en même temps. J'ai utilisé ceci est une simulation de chaîne de Markov, où j'ai couru plusieurs chaînes en même temps (pour gagner du temps). À l'origine, mon script ouvrait 5 fenêtres d'invite de commande différentes et affichait la sortie, mais j'ai décidé qu'il était préférable de rediriger la sortie vers la fenêtre principale, où je pouvais afficher la progression de chacun en ligne. Quand le processus a fini et a quitté, je le manipulerais pour que la sortie par défaut soit "Terminé". En outre, exécutez-vous ceci est Linux ou Windows? –

+0

Encore une chose, c'est que la bibliothèque de sous-processus peut être un peu boguée, donc vous devrez peut-être créer des classes threadées, et générer de nouveaux threads pour lancer Aria2c. Cela peut être beaucoup plus lent (en fonction de la façon dont aria2c est géré) Je peux suggérer de créer un sous-module en python qui appelle simplement le programme via os.system (...), et votre script principal peut appeler un sous-processus.Popen () sur ce sous-module avec sys.argv donné à utiliser dans l'appel système Mais si vous exécutez ce programme via python sur un seul cas en utilisant simplement os.system (...) une fenêtre apparaît-elle et la sortie est affichée? –

Questions connexes