【问题标题】:Cygwin sees a file that windows can't--I want to access this file from pythonCygwin看到一个windows看不到的文件——我想从python访问这个文件
【发布时间】:2013-08-06 18:38:53
【问题描述】:

我有一个连接到我的 USB 的设备,它创建了一个名为 Tpolling.log 的日志文件。 我可以通过 Cygwin 看到它,但我无法通过 Windows 看到它(隐藏文件设置为始终显示)。我也无法从 python 访问它。

我希望能够在 python 中读取它,但 python 找不到它。

有效的cygwin路径是

  /cygdrive/c/Program Files (x86)/TDA

ls 显示有一个名为 Tpolling.log 的文件

$ cygpath -w "/cygdrive/c/Program Files (x86)/TDA"
C:\Program Files (x86)\TDA

但是,下面给出了一个错误,指出没有 Tpolling.log 之类的文件。我用其他文件检查了基本路径。

f= open("C:\\Program Files (x86)\\TDA\\TPolling.log",'r')

当我在命令 propmpt 中运行“Dir”时,Windows 看不到文件 Tpolling.log。 该文件保存在 USB 设备的闪存中,我没有要求 cygwin 挂载它,所以我不确定 cygwin 是如何看到它的。

除了从cygwin运行python程序之外,我如何从python访问它?

这是来自 cygwin 的文件权限-

    drwx------+ 1 SYSTEM         SYSTEM             0 Jul 23 11:27 .
    drwx------+ 1 Administrators None               0 Jul 23 14:39 ..
    -rwx------+ 1 SYSTEM         SYSTEM        684032 Dec 27  2010 NationalInstruments.UI.Design.dll
    -rw
    -rwx------+ 1 SYSTEM         SYSTEM          1078 Jan  3  2010 TDAT.ico
    -rwx------+ 1 lab    Domain Users 2920041 Aug  6 14:50 TPolling.log
    -rwx------+ 1 SYSTEM         SYSTEM         65536 Dec 27  2010 Winsoft.ComPort.dll

【问题讨论】:

  • 你能用 Cygwin Python 代替原生 Python 吗?那显然可以解决问题……
  • 不幸的是我不能,它进入了我无法修改的其他人的代码。
  • 等一下……“文件已保存在 USB 设备的闪存中”。所以你的USB设备是C:?你是怎么做到的? USB设备是否可能实际上是F:,并且由于某种原因Cygwin将其映射到/cygdrive/f而不是/cygdrive/c,所以您只是在本机Windows中查看错误的驱动器号?或者,或者,也许你以某种方式让/cygdrive/c 成为 F: over C: 或其他东西的覆盖?
  • 我真的没有解释,但我能够通过让命令 shell 表现得像 cygwin 来解决我的问题。

标签: python windows cygwin


【解决方案1】:

Windows 应用程序兼容性助您一臂之力。

您可以在 C:\Users\USERNAME\AppData\Local\VirtualStore\Program Files (x86)\TDA\TPolling.log 下找到您的日志文件

例如,如果您导航到 C:\,您可能会在资源管理器中看到以下按钮:

  • 整理
  • 分享给
  • 兼容性文件--->这是你的朋友,点击它。
  • 新建文件夹

Windows 应用程序兼容性功能基本上模拟某些程序的环境(例如目录、文件、注册表项)的背景发生了什么,例如用于 Cygwin 和 TDA 程序。这些文件用于需要兼容性的程序,但 explorer.exe 等其他程序看不到它。

我认为我的机器上有一些 rootkit,因为我看到了来自 cygwin 的文件,但没有来自资源管理器。至少事实证明这些文件不是rootkit,有点:)

【讨论】:

  • 是否可以禁用此行为? (宁愿得到“拒绝访问”消息,也不愿得到这个奇怪的影子世界)
  • 有什么办法可以禁用这种行为吗?
  • 兼容性文件已从 Windows 8 中删除;但是,转到 %LocalAppData%\VirtualStore 你会在那里找到你的文件
【解决方案2】:

dir /a:h 将显示“隐藏”文件。

dir /a:s 将显示“系统”文件。

如果您想在 Windows 资源管理器中查看该文件,您可以取消选中“文件查看选项”对话框中的“隐藏受保护的操作系统文件”选项。

您可能想尝试“dir /a:s >files.txt”,然后检查该文件以找出该文件名中是否嵌入了任何不可见字符,并查看您是否有权限读取/更新该文件。否则你应该可以从 Python 中打开它。

【讨论】:

  • 谢谢,但这并没有解决问题。这是来自 cygwin 的文件权限,与我可以看到的另一个文件相比...-rwx------+ 1 SYSTEM SYSTEM 1078 Jan 3 2010 TDAT.ico -rwx------+ 1 lab1 Domain Users 2920041 8 月 6 日 14:50 TPolling.log
  • @Illusionist 不要使用 Cygwin 查看文件权限:Windows ACL 比 Unix 文件权限更细。修复我建议的 Windows 资源管理器,然后导航到相应的目录,右键单击该文件,然后查看“安全”选项卡。检查您(或运行您的脚本的进程)是否有权读取和更新该文件。您是否检查了不可见的字符(例如嵌入的前导空格)?
  • Dir /a:s 不提供任何输出。我在 Windows 7 上。输出是 - 驱动器 C 中的卷没有标签。卷序列号为 30D5-1CC3 目录 C:\Program Files (x86)\TDA
  • Curt,我可以在 Cygwin 中读取文件。我做了你建议的文件夹更改,但我仍然看不到文件。
  • @Illusionist dir /a:h 也不显示任何内容?更改我建议的“文件视图”选项后,您能在 Windows 资源管理器中看到该文件吗?
【解决方案3】:

好的,如果有人有类似的问题 - 这就是我解决问题的方法。非常感谢 Curt 和 abarnert 帮助我到达这里。我使命令提示符的行为类似于 cygwin(将 cygwin 路径(对我来说是 c:\cywgin\bin)添加到我的路径变量中),然后我可以使用 os.system() 从我的 python 程序中复制文件。

【讨论】:

    猜你喜欢
    • 2012-08-04
    • 1970-01-01
    • 2021-08-30
    • 2012-12-22
    • 2015-09-06
    • 2017-10-23
    • 1970-01-01
    • 2013-08-22
    • 1970-01-01
    相关资源
    最近更新 更多