Win98中涉及双斜杠的奇怪"功能"

大家好. 我将此发送到列表,因为我想知道是否有人 否则曾经偶然发现了这个,也是因为一个可能 解决方案是修补或简单地"装饰",其中一些python 库功能(几个OS和OS.Path调用). 注意:如果 您要回复,请在这样做之前阅读 *全部 * 已经探索了这个问题很多,没有发现明显的 解决方案. ** 问题 ** 我正在评估Drpython,这是现在可用的众多IDE之一. 我曾有一个 问题是我能够追踪到特定方式 构建了程序的路径名使用. 做一个长篇小说 简而言之,Windows 98不喜欢以下格式的路径名: 斜线:" c://某种程度上" 后斜线:r" c:\\ somedir" (无论是向前还是向后提供字符串,都没关系 斜线. 如果双斜线在驱动器之后立即位于 字母+逗号,然后炸弹. 结果可能是一个奇怪的即时 错误,但是在某些情况下,人们必须期望长时间的超时. 双倍的 任何形式的斜线都允许在路径名的中间, 尽管) 这个问题似乎有一个明显的解释. 可能是每个人 知道,Windows在机器名称中使用双重斜线符号 SMB分享. 但是等等 - 路径名包含一个驱动器字母,所以 不能成为SMB共享名称! 还是可以? 我从未见过 这样的分享: C:\\ MachineName \ Somedir 我真的不知道上面的路径名在SMB中是否有效. 但 我有充分的理由相信它应该是无效的,因为 没有意义(当然,由于驱动器字母). 知道这一点, 问题可以很容易地在DOS提示中复制: a)CD C:\\ Windows->使用"无效文件夹"消息失败 b)cd c:\\ [my_workstation_name] - >中止,重试或忽略 示例(b)失败了,因为我已经禁用了我的文件 个人电脑. 但是奇怪的是,它的处理方式有所不同 因为我使用了自己的工作站名称. 我也不知道这是否 方式问题还影响Windows的其他版本,除了WIN98SE. 如果你 试试看,请告诉我. **解决问题** Drpython依靠字符串串联来构建新的路径名. 我的 root dir是" c:/",在代码中的某些地方,其他作品是 与之连接,导致问题. 在UNIX中,这不会发生 - 双斜线在任何地方都可以. 知道这是三个 解决该问题的可能解决方案: 1)切勿以双重斜线开头编写路径名. 这应该很容易...但是请记住,我正在处理第三方代码 这里. 我需要一些时间才能找到并纠正所有 使用路径名调用OS功能的位置. 我试图 实际上,这样做,但由于 这个问题,因为我发现了一个构建路径名的另一个地方 从小块的consation. 2)修复OS调用以纠正问题. 不太确定... 因为恐怕不是这不是 将使用标准Python库. 毕竟,这是 Windows错误. 3)装饰操作系统调用以纠正问题. 目前,这是我最好的选择,即不会破裂的通用解决方案 其他任何人的代码. 我可以为某些受影响的操作系统写一个包装器 呼叫,并在路径名中消除双重斜线 调用原始功能. 它可能起作用,但我仍然必须 测试它. 好吧,这就是问题. 我该怎么办? - - 卡洛斯·里贝罗(Carlos Ribeiro) Consultoria em Projetos 博客:http://rascunhosrotos.blogspot.com 博客:http://pythonnotes.blogspot.com 邮件:ca ********@gmail.com 邮件:ca *********@yahoo.com

# 回答1

卡洛斯·里贝罗(Carlos Ribeiro)写道: 在我看来,这里的问题是drpython *应该 * 使用os.path.join()构建这些路径名,而不是 级联. (os.path.join()智能删除重复 目录分离器.)不过,这可能没有太大帮助,因为那是 不是您的代码. (如果您尚未将其报告为[一系列] bug [s]在drpython中,您可能应该...) 鉴于修复Drpython对您来说不是一个非常实用的选择,我会 说包装OS模块可能是剩下的最佳选择,但我不是 当然要如何处理. 鉴于OS是一个内置模块, 一旦 口译员已经开始,我不太了解整个过程 足以提供具体的建议. 杰夫·香农 技术人员/程序员 信用国际
# 回答2

> 也许您可以使用OS.Path.join和OS.Path.Normpath应用于所有人 用户指定的路径? 我没有窗户,所以我不能说 os.path.normpath('c:// foo')的行为,但也许它确实可以完成工作. - - 问候, Diez B. Roggisch
# 回答3

卡洛斯·里贝罗(Carlos Ribeiro)写道: 此外,作为一个额外的数据点,这两者都失败了 系统找不到"我的win2k机器上的路径",因此不是 只是一个Win9X问题. (我不确定它们是否与众不同 机器上的错误,但我的机器上的错误很大, 但是无论哪种情况,它仍然没有功能.) 杰夫·香农 技术人员/程序员 信用国际
# 回答4

Diez B. Roggisch写道: 也许您可以使用OS.Path.join和OS.Path.NormPath应用于所有用户指定的路径? 我没有窗户,所以我不能说OS.Path.normpath('c:// foo')的行为,但也许它确实可以完成工作. C:\> Python Python 2.3.4(#53,2004年5月25日,21:17:02)[MSC V.1200 32位(Intel)] Win32 键入"帮助","版权","学分"或"许可"以获取更多信息. 'c:\\某些路 似乎NormPath无法完成工作,但是Abspath将是...如果 它不会引起其他问题. 由于我们本来就交易 有了这个问题的绝对路径,也许这是足够的? -peter
# 回答5

在周二,2004年9月14日16:43:46 -0400,彼得·汉森写道: 奇怪的. 我尝试了她 e有不同的结果. ActivePython 2.3.2基于 Python 2.3.2(#49,2003年11月13日,10:34:54)[MSC V.1200 32位(Intel)] Win32 'c:\\\\ work' 当然,我不使用与您相同的构建. 要么有一些 2.3.2和2.3.4之间的错误构成,或者使用的基础库 ActivePython和标准Python在这方面有所不同(不高度 无论如何). 我不确定. - - 卡洛斯·里贝罗(Carlos Ribeiro) Consultoria em Projetos 博客:http://rascunhosrotos.blogspot.com 博客:http://pythonnotes.blogspot.com 邮件:ca ********@gmail.com 邮件:ca *********@yahoo.com
# 回答6

卡洛斯·里贝罗(Carlos Ribeiro)写道:" c:\\ somepath"奇怪. 我在这里尝试了不同的结果. ActivePyThon 2.3.2基于Python 2.3.2(#49,2003年11月13日,10:34:54)[MSC V.1200 32位(Intel)],win32'C:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \ work'当然,我不使用与您相同的构建. 在2.3.2和2.3.4之间存在一些错误,或者在这方面使用ActivePython和Standard Python使用的基础库有所不同(无论如何,无论如何都不是很可能). 我不确定. 您是否安装了Pywin32(Win32All)? 改用这个: win32api.getfullpathname('c:// work') 这与我的Abspath一样,在我的上面也一样. 我问是因为 ntpath.py中似乎正在调用等效的东西 其中而不是normpath(join(getCWD(),路径))方法 文档注释是等效的... - 盲目的盲目的y'rs, 彼得
# 回答7

在周二,2004年9月14日18:16:59 -0400,彼得·汉森(Peter Hansen)写道: 你是对的. 那就是我现在得到的: pythonwin 2.3.2(#49,2003年11月13日,10:34:54)[MSC V.1200 32 BIT (英特尔)]在Win32上. 部分版权1994-2001 Mark Hammond(mhthybedy@skippinet.com.au) - 有关进一步的版权信息,请参见"帮助/关于pythonwin". 'c:\\\\ work' 似乎要么ActivePython使用不同的实现 OS.ABSPATH()或代码在2.3.2和2.3.4之间更改. 最后 我检查ActivePython仍在使用2.3.2的时间 - 我会检查一下 同样,如果有较新的版本,请升级. - - 卡洛斯·里贝罗(Carlos Ribeiro) Consultoria em Projetos 博客:http://rascunhosrotos.blogspot.com 博客:http://pythonnotes.blogspot.com 邮件:ca ********@gmail.com 邮件:ca *********@yahoo.com
# 回答8

卡洛斯·里贝罗(Carlos Ribeiro)写道:你是对的. 这就是我现在得到的:pythonwin 2.3.2(#49,2003年11月13日,10:34:54)[MSC V.1200 32位(Intel)] Win32上. 'c:\\\\ work'似乎ActivePython使用其他实现OS.ABSPATH(),或者代码在2.3.2和2.3.4之间更改. 我上次检查ActivePython仍在使用2.3.2-我将再次检查出来,并升级是否可用. 我得出不同的结论. 请注意,当我说"这 与Abspath相同的是"我的意思是 *我的 *输出 对于getfullpathname()调用实际上是这样: 'c:\\工作' 换句话说,这似乎是OS差异. 什么味道 和Windows的版本 nning? 我正在使用XP Pro SP2. -peter
# 回答9

糟糕. 由于某种原因,我误解了您的消息. 我正在使用Win98 SE,并且 没有计划升级的计划(至少我仅限于当前的PC 设置). 关于此错误:如果很明显这是Windows错误,请执行此操作 在图书馆本身中修复它是有意义的吗? 该错误存在,但是 它不会影响太大的软件,因为很少有人做事 "错误道. 文档中的注释足以 在WIN9X的情况下,澄清了代码的实际工作. 患病的 向drpython家伙报告错误,让他们解决特定 他们的软件问题. 我解决了一些问题 位置,但我不确定是否找到了所有相关位置. 在周二,2004年9月14日21:03:44 -0400,彼得·汉森(Peter Hansen)写道:你是对的. 这就是我现在得到的:pythonwin 2.3.2(#49,2003年11月13日,10:34:54)[MSC V.1200 32位(Intel)] Win32上. 'c:\\\\ work'似乎ActivePython使用其他实现OS.ABSPATH(),或者代码在2.3.2和2.3.4之间更改. 我上次检查ActivePython仍在使用2.3.2-我将再次检查出来,并升级是否可用. 我得出不同的结论. 请注意,当我说"这与Abspath的作用相同"时,我的意思是 *我的 *我的 *输出for getfullpathname()呼叫实际上是这样:'c:\\ work'换句话说,它似乎是OS 区别. 您正在运行什么风味和版本? 我正在使用XP Pro SP2. -peter -http://mail.python.org/mailman/listinfo/python-list - - 卡洛斯·里贝罗(Carlos Ribeiro) Consultoria em Projetos 博客:http://rascunhosrotos.blogspot.com 博客:http://pythonnotes.blogspot.com 邮件:ca ********@gmail.com 邮件:ca *********@yahoo.com
# 回答10

卡洛斯·里贝罗(Carlos Ribeiro)写道: 不确定,但是有人可以说,如果执行操作系统是这样做的 越野车,要利用它的代码应该是 删除并采取了另一种方法. 或者重要的话 足以插入一个特殊情况. 我怀疑你的意见 对此有效:很少有地方的路径看起来像C://工作 为解决这个问题. -peter

标签: python

添加新评论