【问题标题】:python can I suppy username and password to os.listdir?python 我可以向 os.listdir 提供用户名和密码吗?
【发布时间】:2015-05-06 01:36:03
【问题描述】:

Python 3.4、Django 1.7、Windows Apache 2.4.12

我正在尝试列出 Windows 共享驱动器(仅限某些用户)上的所有文件,然后将几个文件写入共享驱动器。

我正在使用 os.listdir 来执行此操作。如果我只是在我的机器上运行 Web 应用程序,它运行良好,但一旦它部署到实际服务器上,它就会停止工作。

问题在于 Windows 共享驱动器的权限。用户必须先登录,所以我确实有他们的用户名和密码。

我的问题是如何为 os.listdir 提供用户名和密码?

我尝试了 os.listdir('//windows/share/drive/dir@dominin/username:password') 但系统会尝试查找文件而不是传递用户名和密码。

有谁知道如何解决这个问题?或者我需要映射驱动器(如何使用凭证映射驱动器?)、列出文件、写入文件,然后断开映射的驱动器?

非常感谢。

【问题讨论】:

  • 这不是真正的python问题,而是Windows问题。 UNC 路径无法处理路径中的用户名和密码(它们不是 URL)。考虑到这一点,这个问题似乎与stackoverflow.com/questions/8172079/… 重复

标签: python django


【解决方案1】:

你应该看看net use Windows 命令。它允许您使用给定的凭据挂载任何网络资源。

在访问网络资源之前,可以从 Python 中执行net use 命令,如下所示:

net use \\computername\path\to\dir /user:username password

如果凭据正确,则可以访问网络资源,os.listdir() 将起作用。

如果给定的资源已经使用不同的凭据挂载,可能会出现一些问题。在这种情况下,您应该先卸载它们 (net use \\computername\path\to\dir /delete)

【讨论】:

  • 谢谢。我遇到了卸载问题。无论如何,是否可以判断用户是否有权访问该驱动器而不是安装驱动器?
  • 您可以尝试在没有凭据的情况下挂载网络资源(调用net use \\computername\path\to\dir)——在这种情况下,将使用运行 Python 代码的用户凭据。如果操作失败——意味着用户没有权限。
  • 另一个问题,如果我尝试在网络应用程序中映射驱动器,它会尝试在服务器或本地用户机器上映射驱动器?
  • 第一:你不“映射驱动器”,你挂载网络资源。第二种:网络资源挂载到你运行net use的电脑上。尝试在本地计算机的命令提示符下使用net use 来了解它是如何工作的。没有任何选项的net use 将向您显示已安装资源的列表(注意,如果已安装资源并不一定意味着它是可访问的)。 /delete 键可让您卸载资源。通过调用 net use 并使用资源路径(以及可选的凭据),您可以挂载给定的资源。
  • 感谢您的帮助!这是正确的答案,但由于组织网络设置,并不能解决我的问题。我只是无法在服务器上映射驱动器。 :( 完全可以在我的本地机器上找到。
【解决方案2】:

根据Python manual os.listdir(path) 只接受path 名称作为参数。它可能适用于您在本地使用 Django 测试服务器,因为该环境中的权限与使用 Apache 或 Nginx 等生产网络服务器不同。尝试查看以下预先存在的相关 SO 问题和答案 - 它们可能会为您提供一些指导,尤其是在 Win 框中:

What is the best way to map windows drives using Python?

python copy files to a network location on Windows without mapping a drive

【讨论】:

  • 有没有办法在不映射驱动器的情况下检查用户是否有权访问共享驱动器?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-18
  • 2023-03-27
  • 1970-01-01
  • 2019-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多