为什么在 powershell 控制台上使用相同的 powershell 命令 运行 但不使用 os.system?

why the same powershell command run on the powershell console but not using os.system?

我想在 Python 脚本中包含一个创建 7zip 存档的命令。由于我正在处理 Windows,因此我需要将命令传递到 powershell 控制台。我打算用 os.system 来做(我知道这不是最好的方法,我应该使用 subprocess,但我真的只需要一个快速修复,它不会在这种情况下我学习使用新模块的时间很有效)。 如果来自 powershell 控制台 运行

,则以下命令有效
&'C:\Program Files\7-Zip\7z' a -mx=0 X:/myarch.zip X:/myarch

所以我在 python 中重新创建相同的字符串,如下所示:

cmdl = r"&'C:\Program Files\7-Zip\7z' a -mx=0 X:/myarch.zip X:/myarch"

字符串解释如下:

"&'C:\\Program Files\\7-Zip\\7z' a -mx=0 X:/myarch.zip X:/myarch"

现在,如果我在 powershell 控制台中复制粘贴上面的字符串,它 运行 没有问题。但是,如果我 运行 它在 python 内使用 os.system(cmdl) 我得到以下错误

"The filename, directory name, or volume label syntax is incorrect"

为什么会这样,我该如何解决这个问题?

os.system是用来执行cmd命令的,cmd命令在powershell中可以是运行也许毕竟powershell有点高级但是我敢肯定你不能运行 powershell 中的 cmd 命令,此后您的代码将无法正常工作。

然而,执行 powershell 命令的创造性解决方案 from python(不是 using python)是将您的命令写入 .ps 文件(powershell 脚本),然后使用 os.startfile()(使用此代码:os.startfile("script.ps")

运行