Windows上的Python Popen,close_fds和重定向输入/输出

时间:2016-02-16 09:33:17

标签: python subprocess

我正在尝试通过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并重定向输入/输出。

知道发生了什么事吗?我该如何与流程互动?谢谢,

1 个答案:

答案 0 :(得分:1)

我知道这是一个旧帖子,但是为了记录,这是我的解决方案:

我也有这个问题。我发现了一个棘手的解决方法,发布在以下Q& A中: Howto: workaround of close_fds=True and redirect stdout/stderr on windows

祝你有个美好的一天。