У нас есть два сценария python, которым необходимо обмениваться данными по stdin/out (в Windows). К сожалению, оба они должны быть в разных версиях Python. Фрагменты являются:Передача двоичного файла из Python3 в Python2 в Windows
Источник (Python 3):
sys.stderr.write("LEN1: %s\n" % len(source_file.read()))
subprocess.check_call(["C:\\python2.exe", "-u", "-c",
"""
import foo
foo.to_json()
"""], stdin=source_file, stdout=json_file, stderr=sys.stderr, env=os.environ)
Target (Python 2):
def to_json():
import msvcrt
msvcrt.setmode(sys.stdin.fileno(), os.O_BINARY)
input_message = sys.stdin.read()
sys.stderr.write("LEN2: %s\n" % len(input_message))
Когда я выполнять сценарии, я получаю:
LEN2: 0
LEN1: 37165
Похоже, я делаю некоторые что принципиально неправильно, но не может понять, что именно. Может ли кто-нибудь попытаться помочь мне отладить, где я ошибаюсь.
Вы пытались использовать «Popen» с трубами и разговаривали с ним «общаться»? https://docs.python.org/2/library/subprocess.html#subprocess.Popen – theodox
Вызов 'setmode' в' to_json' является избыточным, поскольку аргумент '-u' устанавливает' stdin' в двоичный режим. Передача 'env = os.environ', вероятно, избыточна, если только' os.environ' каким-то образом не синхронизируется с рабочей средой. – eryksun