【问题标题】:How can I use Linux commands in python Windows如何在 python Windows 中使用 Linux 命令
【发布时间】:2017-03-29 16:37:21
【问题描述】:

是否可以在 Windows python 中使用mv。 我想使用mv --backup=t *.pdf ..\ 来复制现有文件但不想覆盖它们,Windows move 命令不支持现有文件的后缀。

我可以在 Windows Bash 或 CygWin 中使用 mv 命令运行我的脚本,但不能在 cmd 或 powershell 上运行。 那么是否可以在 Windows python 中使用 Linux 命令呢?

编辑:我正在使用 python 2.7

【问题讨论】:

  • 如果您运行的是 Windows 10,这就是 WSL(Windows 子系统 Linux)背后的目的。要打开它,请在终端中键入 bash。请注意,它可能不会默认安装,并且会在控制面板的添加 Windows 功能部分中
  • 为什么不使用shutil.move()?

标签: python linux windows


【解决方案1】:

我尝试了一种不同的方法来重命名现有文件,并在“名称”的末尾使用随机十六进制

我对此非常满意:D

if os.path.isfile('../%s.pdf' % name) == True: os.system('magick *.jpg pdf:"%s".pdf' % name_hex) else: os.system('magick *.jpg pdf:"%s".pdf' % name)

【讨论】:

  • 您可以通过单击赞成/反对票旁边的空心复选标记将其中一个答案标记为已接受,使其变为纯绿色。如果您改变主意,可以稍后撤消。
【解决方案2】:

os.rename(src, dst)

将文件或目录 src 重命名为 dst。如果 dst 是一个目录,则会引发 OSError。在 Unix 上,如果 dst 存在并且是一个文件,如果用户有权限,它将被静默替换。如果 src 和 dst 在不同的文件系统上,该操作可能会在某些 Unix 风格上失败。如果成功,重命名将是一个原子操作(这是 POSIX 要求)。 在 Windows 上, 如果 dst 已经存在,即使是文件也会引发 OSError;当 dst 命名现有文件时,可能无法实现原子重命名。

或shutil.move(src, dst)

递归地将文件或目录 (src) 移动到另一个位置 (dst)。

如果目标是现有目录,则将 src 移动到该目录中。如果目标已经存在但不是目录,则可能会根据 os.rename() 语义被覆盖。

如果目标位于当前文件系统上,则使用 os.rename()。否则,src 被复制(使用 shutil.copy2())到 dst,然后被删除。

如果我猜对了,两者都对你有用。

顺便说一句,我知道当你安装 git 时,你可以在安装过程中在你的 CMD 中启用 Linux 命令。 (注意那里的复选框),但我不确定它会如何表现并与您的脚本集成。

【讨论】:

  • os.rename 不会在 Windows Python 3.3+ 中跨文件系统移动。要跨文件系统移动并避免覆盖现有文件,请使用 shutil.move 和 dst 作为目标目录。
  • 总的来说,我必须同意你的观点,除了我不知道@Kamil Mirza 使用哪个 python 版本的问题。在 os 之间跨平台使用 Python3 上的os.replace()。 docs.python.org/3/library/os.html#os.replace
  • os.replace 不应使用。将 shutil.move 与 try-except 一起使用。对于 Windows,异常处理程序可以简单地在循环中使用 os.rename,递增编号的备份名称,直到重命名成功;然后重试移动。对于 Unix,创建备份并不是那么简单,因为 os.rename 替换了目标。
猜你喜欢
  • 2015-01-19
  • 2018-02-19
  • 1970-01-01
  • 2021-10-12
  • 1970-01-01
  • 2011-11-30
  • 1970-01-01
  • 2015-05-31
  • 2019-12-24
相关资源
最近更新 更多