为什么为我的 Python 子进程提供环境会导致它中止?
Why does providing an environment to my Python subprocess cause it to abort?
我正在尝试 运行 通过 Python 我公司开发的可执行文件的子进程;我们称它为 prog.exe
。我可以从 CMD 上 运行 这个命令就好了;我可以 运行 通过 subprocess
就好了;但是如果我尝试将 env
传递给 subprocess
,我会得到一个错误:
C:\Users\me> prog.exe -h
prog V1.2.2 (Build 09-07-2016.12.52)
more dummy help text...
C:\Users\me> python
Python 3.5.0 (v3.5.0:374f501f4567, Sep 13 2015, 02:27:37) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import subprocess
>>> import os
>>> subprocess.Popen("prog.exe -h").wait()
prog V1.2.2 (Build 09-07-2016.12.52)
more dummy help text...
0
>>>
>>> subprocess.Popen("prog.exe -h", env=os.environ).wait()
执行该命令后,将打开以下对话框,通知我“prog.exe
已停止工作”和 "Windows is checking for a solution to the problem...":
变成 "A problem caused the program to stop working correctly. Windows will close the program and notify you if a solution is available.":
当我关闭该对话框时,子进程退出并出现错误:
255
>>>
这是怎么回事?我认为如果我不指定 env
,os.environ
本质上是作为 env
传递给 subprocess
。那么为什么当我指定它时它会导致我的程序死掉?
我试过 Python 3.5 和 Python 2.7,结果相同。
如in an older SO post所述,os.environ
键是stored/accessed,不区分大小写。 nt.environ
保留传递给 Python 进程的环境变量的大小写。
在这种情况下,prog.exe
显然是在以区分大小写的方式访问环境变量,因此需要传入原始的混合大小写环境。
使用 nt.environ
而不是 os.environ
可以解决问题:
>>> import nt
>>> subprocess.Popen("prog.exe -h", env=nt.environ).wait()
prog V1.2.2 (Build 09-07-2016.12.52)
more dummy help text...
0
>>>
我正在尝试 运行 通过 Python 我公司开发的可执行文件的子进程;我们称它为 prog.exe
。我可以从 CMD 上 运行 这个命令就好了;我可以 运行 通过 subprocess
就好了;但是如果我尝试将 env
传递给 subprocess
,我会得到一个错误:
C:\Users\me> prog.exe -h
prog V1.2.2 (Build 09-07-2016.12.52)
more dummy help text...
C:\Users\me> python
Python 3.5.0 (v3.5.0:374f501f4567, Sep 13 2015, 02:27:37) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import subprocess
>>> import os
>>> subprocess.Popen("prog.exe -h").wait()
prog V1.2.2 (Build 09-07-2016.12.52)
more dummy help text...
0
>>>
>>> subprocess.Popen("prog.exe -h", env=os.environ).wait()
执行该命令后,将打开以下对话框,通知我“prog.exe
已停止工作”和 "Windows is checking for a solution to the problem...":
变成 "A problem caused the program to stop working correctly. Windows will close the program and notify you if a solution is available.":
当我关闭该对话框时,子进程退出并出现错误:
255
>>>
这是怎么回事?我认为如果我不指定 env
,os.environ
本质上是作为 env
传递给 subprocess
。那么为什么当我指定它时它会导致我的程序死掉?
我试过 Python 3.5 和 Python 2.7,结果相同。
如in an older SO post所述,os.environ
键是stored/accessed,不区分大小写。 nt.environ
保留传递给 Python 进程的环境变量的大小写。
在这种情况下,prog.exe
显然是在以区分大小写的方式访问环境变量,因此需要传入原始的混合大小写环境。
使用 nt.environ
而不是 os.environ
可以解决问题:
>>> import nt
>>> subprocess.Popen("prog.exe -h", env=nt.environ).wait()
prog V1.2.2 (Build 09-07-2016.12.52)
more dummy help text...
0
>>>