【问题标题】:os.access returning useless value for mode os.F_OK in IronPythonos.access 在 IronPython 中为模式 os.F_OK 返回无用的值
【发布时间】:2011-07-25 23:46:04
【问题描述】:

我有一堆我试图在 IronPython 中使用的 python 脚本(我需要 C# 功能),我在 os.access 方法中遇到了一些问题。

当使用模式设置为 os.F_OK 的 os.access 方法时(查看是否可以访问路径),我每次都返回 False,即使 python 解释器为该目录返回 True 也是如此。奇怪的是,使用 os.R_OK、os.W_OK 和 os.X_OK 模式调用的 os.access 方法返回 True。

这是我敲出的一个代码示例来演示这个问题:

import os

d = ["C:\\", ".\\", "./", ".", "C:\\BOGUS_DIR"]

for path in d:
    print path
    try:
        print "access: %s"%os.access(path, os.F_OK)
        print "read: %s"%os.access(path, os.R_OK)
        print "write: %s"%os.access(path, os.W_OK)
        print "execute: %s"%os.access(path, os.X_OK)
        print "-------------------------"
    except Exception, e:
        print e

print "finished"

raw_input("")

结果:

C:\
access: False
read: True
write: True
execute: True
-------------------------
.\
access: False
read: True
write: True
execute: True
-------------------------
./
access: False
read: True
write: True
execute: True
-------------------------
.
access: False
read: True
write: True
execute: True
-------------------------
C:\BOGUS_DIR
access: False
[Errno 2] Could not find file 'C:\BOGUS_DIR'.
finished

为了更好地衡量,我在列表中添加了一个虚假目录(一个不存在的目录)。 os.access 模式为 os.F_OK 返回 False(一如既往),但调用检查 os.R_OK 抛出异常(如预期)。

另外,我在 python 解释器中测试了 os.access 方法,效果很好。

我似乎找不到其他人遇到这个问题,这就是为什么我的第一个假设是我做了一些愚蠢的事情(或者错过了一些明显的事情)。我正在通过 Visual Studio 2010 运行 IronPython 代码,可能有一些干扰。

任何帮助将不胜感激。谢谢

【问题讨论】:

  • 我没有尝试过,因为我试图保持原始python代码不变。其他进程原生使用python代码,所以我更喜欢使用python模块(如os)

标签: c# python windows file ironpython


【解决方案1】:

一方面,os.access 可能会产生误导 - 最好只打开文件并捕获发生的任何异常。

IronPython 使用 os.F_OK 来表示“此文件是否存在”,并将其归结为对 File.Exists() 的调用 - 对于目录返回 false。

This is a bug,应该在 2.7.1 中修复。

【讨论】:

  • 谢谢!正是我正在寻找的解释
猜你喜欢
  • 2017-04-20
  • 2021-05-08
  • 2015-06-26
  • 2014-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
相关资源
最近更新 更多