python上os.system中的花括号

Zor*_*rro 1 python bash curly-braces

在 linux 终端中,我可以从目录中删除所有文件,包括隐藏文件:

sudo rm -rf /path/to/folder/{*,.*} 2> /dev/null
Run Code Online (Sandbox Code Playgroud)

我正在尝试通过 os.system 在 python 中运行以下命令:

>>> os.system('sudo rm -rf /path/to/folder/{*,.*}')
Run Code Online (Sandbox Code Playgroud)

这将在没有任何错误的情况下退出(退出代码 0)但不删除任何内容。

我在这里理解花括号可能有特殊含义,但尝试\{*,.*\}不会改变任何事情。

想知道这里发生了什么以及如何告诉 python 在终端中使用花括号。

为了完成工作,我可以做到:

os.system('sudo rm -r /path/to/folder/* /path/to/folder/.myHiddenFile')  # or other combination
Run Code Online (Sandbox Code Playgroud)

但我想了解如何在这里使用花括号。

L.G*_*ger 6

os.system调用 C 标准库函数system,该函数使用/bin/sh -c.

由于您使用的花括号扩展是 bash 功能,因此os.system正在使用的底层 shell根本无法理解。

要解决此问题,您可以通过使用参数调用/bin/bash(或无论您的 bash 在哪里)在 bash 中显式执行命令-c。例如

os.system("/bin/bash -c 'sudo rm -rf /path/to/folder/{*,.*}'")
Run Code Online (Sandbox Code Playgroud)

注意:使用单引号,因为sudo.