【问题标题】:python's os.listdir() of network share fails on 64bit machines64位机器上网络共享文件的python os.listdir()
【发布时间】:2015-11-20 14:21:18
【问题描述】:

这里是sn-p:

p = r"\\server\folder1\folder2"
print p
files = os.listdir(p)
print "found files: ", len(files)

32位机器上的输出:

\\server\folder1\folder2
found files: 9818

64位机器上的输出:

\\server\folder1\folder2
found files: 9818

\\server\folder1\folder2
<type 'exceptions.WindowsError'> [Error 24] The program issued a command but the command length is incorrect: '\\\\server\\folder1\\folder2/*.*'

我试过了 - Python 2.5、2.7、32 位和 64 位(在 64 位机器上)。 - 机器有 32 位和 64 位。

网络共享是可访问的,我有读/写权限。

任何人都知道为什么会引发错误仅在 64 位机器上???

谢谢, r

【问题讨论】:

  • 或许系统调用状态码会更有帮助。安装Debugging Tools for Windows。为调试符号设置系统环境变量:_NT_SYMBOL_PATH=symsrv*symsrv.dll*C:\Symbols*http://msdl.microsoft.com/download/symbols。使用-i 运行您的脚本。在调试器中附加到 python.exe。在系统调用上设置断点:bp ntdll!NtQueryDirectoryFile; g。在 Python 中,调用 os.listdir(p)。在调试器中输入pt; r rax 以单步执行函数返回并打印状态码。输入g 继续。
  • 谢谢!我会试一试的。
  • 您也可以尝试以下操作,而无需使用调试器。初始设置:import ctypes;ntdll = ctypes.WinDLL('ntdll');ntdll.RtlGetLastNtStatus.restype = ctypes.c_uint。然后在处理异常的except 块中,您可以设置ntstatus = hex(ntdll.RtlGetLastNtStatus())

标签: python windows 64-bit 32bit-64bit


【解决方案1】:

试试这个在 64 位机器上运行的代码

import os
p = r"server/folder1"
print p
files = os.listdir(p)
print "found files: ", len(files)

【讨论】:

  • 谢谢!但还是同样的错误 - WindowsError: [错误 24] 程序发出命令但命令长度不正确:'//server/folder1/folder2/*.*'
  • 我试过这个:stackoverflow.com/questions/14354113/… 现在我有时会收到错误...我使用 \\server/folder1/folder2 - 这可能是延迟问题吗?连接问题...
  • @compling 示例中的路径 r"\\server\folder1\folder2" 是正确的,并且是 UNC 路径的规范形式。
  • 您提供什么路径作为输入?
  • @himanshudua 我已经尝试过组合 r"\\server\folder1\folder2", r"\\server/folder1/folder2", "\\\\server\\folder1\\folder2" , "\\\\server/folder1/folder2", 等等...也在不同的计算机(win64)上尝试过,错误很神秘 - 如果一旦工作,下次就不行了......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-08
  • 1970-01-01
  • 1970-01-01
  • 2013-01-23
  • 1970-01-01
相关资源
最近更新 更多