您的位置:首页 > 编程语言 > Python开发

ipython无法使用nbtstat的问题

2016-01-30 10:14 471 查看
背景:python2.7(32bit), win8.1,ipython2.4.1



很明显,在ipython中运行nbtstat命令时,解释器无法正常执行命令,而在dos下面却可以正常执行,通过google,找到了答案,

https://mail.python.org/pipermail/python-win32/2012-March/012121.html

le dahut wrote:
> Using explorer I've found "nbtstat.exe" in C:\Windows\System32.
>
> In a MSDOS prompt :
>    dir C:\Windows\System32\nbtstat.exe
> finds the file.
>
> In a python prompt :
>    os.system('dir C:\\Windows\\System32\\nbtstat.exe')
> returns "File not found".
>
> It seems that :
> * in MSDOS prompt C:\Ẁindows\System32  and C:\Ẁindows\SysWOW64 are two
> separate dirs with different content
> * in a python prompt C:\Ẁindows\System32 = C:\Ẁindows\SysWOW64 (same
> content)

And you are exactly right.

> Any idea ?

This is a very confusing point, so even though it's not directly
Python-related, I think it's still valuable to discuss it again.

As you discovered, Windows is helping you.  For reasons that have never
been adequately explained to me (and believe me, I have asked people who
ought to know), on a 64-bit system, all of the 64-bit commands and DLLs
live in \Windows\System32.  All of the 32-bit commands and DLLs live in
\Windows\SysWOW64.  A 64-bit process gets to see both of those
directories as they really are.

But for a 32-bit process, the operating system "helpfully" rewrites your
paths.  When you refer to \Windows\System32, the system helpfully
rewrites that reference to \Windows\SysWOW64.  Microsoft calls it file
system redirection".  I call it "file system stupidity".

Most of the time, that's OK.  Most of the important commands are present
in both directories.  A few (like nbtstat) are not, and that's a problem.

There are two solutions.  One is to use 64-bit Python, which you have
said is a problem for you.  The other is to use an API with the
tongue-twisting name Wow64DisableWow64FsRedirection.  Here is my script:

import ctypes
k32 = ctypes.windll.kernel32
wow64 = ctypes.c_long( 0 )
k32.Wow64DisableWow64FsRedirection( ctypes.byref(wow64) )
# ... do stuff with real files ...
k32.Wow64RevertWow64FsRedirection( wow64 )


意思是windows正常情况下能够把system32很wow64视为同一路径,而在32位的python中无法访问wow路径下的文件,

这个discuss也给出了解决方法:

1.安装64位的python, 这个办法不怎么好,因为很多程序都是基于32位的,为了这个功能更改到64bit确实没有必要

2.使用一个类似绕口令的api,经过测试,这个可以满足使用要求.解决问题.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: