【问题标题】:How to exactly replicate the behaviour of Windows cmd shell mkdir with Python?如何使用 Python 准确复制 Windows cmd shell mkdir 的行为?
【发布时间】:2019-10-05 17:11:00
【问题描述】:

我正在尝试找到一种以编程方式在我的 PC 上创建文件夹的方法,该文件夹通过“忽略具有这些扩展名的文件”过滤器选择性地同步到我的 Google Drive 存储与备份和同步应用程序。

上下文:

我运行一个文件服务器,我试图通过 Google Drive 访问它。但是,我想过滤掉一些文件夹,而我创建文件夹的方式似乎会影响同步过程。

因此,在服务器上,我的“.workspace”文件夹包含大型临时文件,我不想同步这些文件。为了实现这种行为,我使用了“忽略具有这些扩展名的文件”过滤器。因此,在备份和同步中,我已将“.workspace”扩展名添加到忽略列表中。

当我使用 Windows CMD shell mkdir 函数创建我的“.workspace”文件夹时 - 我的文件夹表现出正确和预期的行为,并且没有同步到我的 GoogleDrive 云存储。

但是,当我使用 Python 操作系统函数创建“.workspace”文件夹时,我的文件夹表现出不正确和不同的行为,并被上传到我的 GoogleDrive 云存储中。

这里是函数

import os
dirName = ".workspace"
os.mkdir(dirName)

os.makedirs(dirName)

这让我相信在 Python 中创建文件夹的内部过程类似于使用 Windows 资源管理器,因为手动创建文件夹时也会出现同样的问题。

我的目标是找到一个 Python 函数以 Window 的原生 CMD 方式创建文件夹。

你有什么建议或者我应该使用任何较低级别的 python 模块来代替 OS 模块吗?

【问题讨论】:

  • 你可以随时执行系统调用os.system("mkdir .workspace")
  • @eryksun 谢谢指正。固定的!我知道保持一致是多么重要,我非常非常非常努力地尝试,但我们到了。 :)

标签: python windows python-2.7 cmd mkdir


【解决方案1】:

os 模块是操作系统的直接接口。所以mkdir 调用Windows mkdir 函数,这不是“本机” windows 函数(即CreateDirectory),而是POSIX 版本。

这并不意味着历史上的mkdir 函数做同样的事情。它可能直接调用CreateDirectory

我通常不建议对此类基本任务执行系统调用,更不建议使用shell=True,但在您的特殊情况下,由于它是唯一适合您的方法,您可以调用@987654330带有来自python的系统调用的@命令

import subprocess
# now call built-in mkdir command from Windows cmd
subprocess.check_call(r"mkdir .workspace",shell=True)

使用shell=True,因为mkdir是内置的,没有它就找不到命令,因为没有mkdir.exe

【讨论】:

  • CPython 的 implementation of os.mkdir 带有一个字节字符串(在 Windows 中应该使用 unicode 来处理文件)只需调用 CreateDirectoryA(path, NULL)。如果我们单步执行 CMD 在 cmd!MdWork 中的 mkdir 实现,我们会看到它只是调用了 CreateDirectoryW。这里没有什么特别之处——除非有东西通过 DLL 注入或较低级别的过滤器驱动程序在系统中挂钩 CreateDirectoryW
  • 我显然无法测试 OP 所说的内容,但我尝试提供 2 个最原始/原生方式的实现。我花了几分钟来添加一个有效的 win32 API 答案。
  • 谢谢你们!我会试试这个,然后发回更新!
猜你喜欢
  • 2013-02-16
  • 2012-03-30
  • 2016-01-08
  • 2019-06-04
  • 1970-01-01
  • 2016-09-25
  • 2021-05-26
  • 2010-11-03
  • 1970-01-01
相关资源
最近更新 更多