python通过os.system()方法执行pscp提示却找不到该应用程序

python通过os.system()方法执行pscp提示却找不到该应用程序

已经提前下载了pscp.exe 放到了system32文件夹,在CMD命令窗口执行pscp没有异常
但是使用os.system('pscp')时出现了报错提示找不到该应用程序。

原因:

原来是python版本时32位的程序,而电脑系统是windows 64位
使用32位的python访问windows命令时,会被自动重定向到C:\Windows\SysWOW64文件夹中(32位的命令),如果在C:\Windows\SysWOW64文件夹中没有找到相关的命令即pscp.exe,就会报上面的错误信息。

如果想在32位的python中直接访问C:\Windows\System32文件夹中64位的命令,则应该使用C:\Windows\SysNative这个虚拟路径来访问。
在32位的python中使用os.system 访问 C:\Windows\System32\pscp.exe  ----> 系统实际上会去访问 C:\Windows\SysWOW64\pscp.exe
访问 C:\Windows\SysNative\pscp.exe ----> 系统实际上会去访问 C:\Windows\System32\pscp.exe

其实%WINDIR%\SysNative文件夹是不存在的,它只是64位Windows系统提供的一种重定向机制。
我们已经知道64位Windows通过System32和SysWoW64两件文件夹来区分64位和32位的系统文件,当32位的应用程序尝试访问System32文件夹的时候,系统会自动把它转到SysWoW64文件夹,这样32位应用程序在32位系统和64位系统就都可以运行了,(而不需要为了64位系统而把System32改成SysWoW64)。
这样就出现了一个问题,32位的应用程序怎么访问真正的System32文件夹呢,即存放64位系统文件的文件夹?答案就是通过SysNative文件夹。这个文件夹并不存在,即在资源管理器中找不到,但当32位的应用程序尝试访问这个文件夹时,64位的Windows会把它重定向到真正的System32文件夹,从而提供了一种让32位应用程序访问64位系统文件的方法

https://stackoverflow.com/questions/5144402/nothing-returned-when-using-32-bit-python-os-popen-on-a-64-bit-windows-7-system

posted @ 2021-06-22 17:05  淡定的人参果  阅读(1069)  评论(0编辑  收藏  举报