我正在尝试通过Popen从主Python程序运行并与特定于供应商的旧版Python(SunGard Arena Python)进行交互,因为我需要通过Python的供应商版本访问数据库。
我可以通过shell运行供应商Python,但我得到了
'import site' failed; use -v for traceback.
现在,当我尝试通过Popen运行时,如果我执行标准:
proc = Popen('U:arena_python.exe',bufsize=-1,stdin=PIPE, stdout=PIPE, stderr=STDOUT)
它根本不起作用,当我做proc.communicate()时,我得到:
('An exception has occurred -- see the traceback log in "acm_.log".\nCreated a minidump in ".\\arena_python-20160216-092027-942.dmp".\n\'import site\' failed; use -v for traceback\n', None)
日志提到C:\ windows \ SysWOW64 \ ntdll.dll中的访问冲突。奇怪的是,如果我运行上面的命令并将脚本作为命令行参数包含,那么在进程再次崩溃之前脚本运行正常。如果我用close_fds = True运行它,它似乎运行得更好:
Popen('U:arena_python.exe',bufsize=-1,close_fds=True)
但后来我不知道如何与流程互动 - 文档说在Windows上你不能使用close_fds = True并重定向输入/输出。
知道发生了什么事吗?我该如何与流程互动?谢谢,
答案 0 :(得分:1)
我知道这是一个旧帖子,但是为了记录,这是我的解决方案:
我也有这个问题。我发现了一个棘手的解决方法,发布在以下Q& A中: Howto: workaround of close_fds=True and redirect stdout/stderr on windows
祝你有个美好的一天。