首页 > 解决方案 > Python子进程模块将路径作为字符串发送

问题描述

从 Python 3 脚本,我正在压缩一个文件夹。

我通常在终端中使用的命令

zip -P P4ssw0rd somefolder.zip somefolder/*

(-PI 用于密码加密,/*最后因为我想压缩文件夹的内容,如果我不包含它,存档只包含一个空文件夹)

这成功地创建了一个somefolder.zip,其中包含正确的、受密码保护的内容。

当我从脚本执行此命令时,我正在使用

subprocess.call(['zip', '-P', 'P4ssw0rd', 'somefolder.zip', 'somefolder/*'])

这给了我一个 zip 错误(如果我直接在终端中编写命令,我会得到同样的错误,但是如果我拼错了文件夹名称,例如zip -P P4ssw0rd somefolder.zip someOtherfolder/*

警告说:

zip 警告:名称不匹配:somefolder/*

据我了解,它以某种方式将 / 和 * 解释为文件夹名称的一部分,而不是我试图在文件夹内导航......

有任何想法吗?


让事情变得更加混乱:

如果 somefolder.zip 已经存在,那么

subprocess.call(['zip', '-P', 'P4ssw0rd', 'somefolder.zip', 'somefolder/*'])

将执行。它说它正在更新文件夹的内容,但据我从档案本身可以看出,实际上没有任何变化。但是,如果我将其更改'somefolder/*'为其他类似的'someOtherfolder/*'内容,它会再次引发名称不匹配错误。

标签: pythonpython-3.xubuntuterminalzip

解决方案


如果您不介意使用子流程模块以外的其他东西,则可以使用:

os.popen("zip -P P4ssw0rd somefolder.zip somefolder/*")

当然,不要忘记import os事先。


推荐阅读