Si vous parlez de l'interpréteur python ou CMD.exe qui est le «parent» de votre script, alors non, ce n'est pas possible. Dans chaque système semblable à POSIX (maintenant vous avez Windows, semble-t-il, et qui pourrait avoir des bizarreries que je ne connais pas, YMMV), chaque processus a trois flux, une entrée standard, une sortie standard et une erreur standard. par défaut Bu (lors de l'exécution dans une console) celles-ci sont dirigées vers la console, mais la redirection est possible en utilisant la notation de tuyau:
python script_a.py | python script_b.py
Ceci lie le flux de sortie standard de l'écriture d'un au flux d'entrée standard du scénario B. L'erreur standard va toujours à la console dans cet exemple. Voir l'article sur standard streams sur Wikipedia.
Si vous parlez d'un processus enfant, vous pouvez le lancer à partir de Python comme si (stdin est également une option si vous voulez une communication bidirectionnelle):
import subprocess
# Of course you can open things other than python here :)
process = subprocess.Popen(["python", "main.py"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
x = process.stderr.readline()
y = process.stdout.readline()
process.wait()
Voir le module Python subprocess pour plus d'informations sur la gestion du processus. Pour la communication, les tubes process.stdin et process.stdout sont considérés comme des standards file objects.
Pour une utilisation avec des tuyaux, la lecture de l'entrée standard comme lassevk suggéré que vous feriez quelque chose comme ceci:
import sys
x = sys.stderr.readline()
y = sys.stdin.readline()
sys.stdin et sys.stdout sont des objets de fichier standard comme indiqué ci-dessus, défini dans le sys module. Vous pouvez également jeter un oeil au module pipes.
Lire des données avec readline() comme dans mon exemple est une façon assez naïve d'obtenir des données. Si la sortie n'est pas orientée ligne ou indéterministe, vous voulez probablement regarder dans polling qui malheureusement ne fonctionne pas dans Windows, mais je suis sûr qu'il existe une alternative là-bas.
Notez que lors de l'appel Python à l'aide subprocess.Popen(), il est souvent utile de passer le drapeau « -u », qui désactive le tampon stdin/stdout/stderr. Python n'autoflush pas stdout lorsque l'enfant commence à lire stdin, si la sortie a été redirigée vers un canal, de sorte que vous pouvez bloquer définitivement la sortie de lecture qui est mise en mémoire tampon. J'ai rencontré ce problème en essayant d'envelopper/automatiser pdb. –