在Windows上将二进制文件从Python3传递到Python2

时间:2015-05-26 16:37:02

标签: python windows python-3.x

我们有两个python脚本,需要通过stdin / out(在Windows上)进行通信。可悲的是,他们都必须使用不同的Python版本。这些片段是:

来源(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)

目标(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

好像我在做一些根本错误的事情,但无法弄清楚究竟是什么。任何人都可以尝试帮我调试,我出错了。

1 个答案:

答案 0 :(得分:3)

在第一个source_file.read()确定文件的长度后,文件指针位于文件的末尾。当您将流传递给check_call()时,您已经耗尽它,并且进一步读取将产生空字符串。这可以通过两种方式解决:

一个。在计算文件长度之前将文件读入内存。

B中。在check_call()之前,使用source_file.seek(0)将文件对象回滚到文件的开头。