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
意思是windows正常情况下能够把system32很wow64视为同一路径,而在32位的python中无法访问wow路径下的文件,
这个discuss也给出了解决方法:
1.安装64位的python, 这个办法不怎么好,因为很多程序都是基于32位的,为了这个功能更改到64bit确实没有必要
2.使用一个类似绕口令的api,经过测试,这个可以满足使用要求.解决问题.
很明显,在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,经过测试,这个可以满足使用要求.解决问题.
相关文章推荐
- python2.7 串口操作方式 编译 .py为windows可运行exe文件
- python 数据类型转换
- python string与list互转
- Python 8.4 进程 vs 线程
- python学习第十三课
- 『Python』序列学习总结之一 ——列表
- python 爬取微信文章
- collections_python
- 学习Python语言---If语句
- 解决bs4在Python 3.5下出现“ImportError: cannot import name 'HTMLParseError'”错误
- 学习Python语言-列表和for循环
- 《笨办法学Python》 第27课手记
- python:为什么reversed()之后,第二次以后的list()得到的结果都是空?
- python 类型之 set
- python class中的@staticmethod
- python大型项目 个人学习中心
- 【Python】用base64和RC4给数据加密/解密
- Python之socket
- Python爬虫实战(5):模拟登录淘宝并获取所有订单
- Python爬虫实战(3):计算大学本学期绩点