Если вы говорите о интерпретаторе python или CMD.exe, который является «родителем» вашего скрипта, то нет, это невозможно. В каждой POSIX-подобной системе (теперь вы работаете под Windows, похоже, и это может иметь некоторые особенности, о которых я не знаю, YMMV). Каждый процесс имеет три потока, стандартный ввод, стандартный вывод и стандартную ошибку. Б-умолчанию (при работе в консоли) они направлены на консоль, но перенаправление возможно с использованием обозначений трубы:
python script_a.py | python script_b.py
Это связывает стандартный выходной поток сценария в стандартном входном поток сценарий В. В этом примере стандартная ошибка сохраняется в консоли. См. Статью о standard streams в Википедии.
Если вы говорите о дочернем процессе, вы можете запустить его из питона, как так (STDIN также вариант, если вы хотите, двустороннюю связь):
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()
Посмотреть модуль Python subprocess для информации об управлении процессом. Для связи протоколы process.stdin и process.stdout считаются стандартными file objects.
Для использования с трубами, чтение из стандартного ввода, как lassevk предложил вам нужно сделать что-то вроде этого:
import sys
x = sys.stderr.readline()
y = sys.stdin.readline()
sys.stdin и sys.stdout стандартные файловые объекты, как было отмечено выше, определяется в sys модуль. Вы также можете взглянуть на модуль pipes.
Чтение данных с помощью readline(), как в моем примере, является довольно наивным способом получения данных. Если выход не является ориентированным на линию или индетерминированным, вы, вероятно, захотите посмотреть в polling, который, к сожалению, не работает в окнах, но я уверен, что есть какая-то альтернатива.
Обратите внимание, что при вызове Python с использованием подпроцесса .Popen() часто бывает полезно передать флаг «-u», который отключает буферизацию на stdin/stdout/stderr. Python не запускает autoflush stdout, когда ребенок начинает читать stdin, если вывод перенаправлен на канал, так что вы можете в конечном итоге заблокировать вечный считываемый вывод, который буферизуется. Я столкнулся с этой проблемой, пытаясь обернуть/автоматизировать pdb. – 2011-11-18 16:29:49