python - 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/*'
内容,它会再次引发名称不匹配错误。
解决方案
如果您不介意使用子流程模块以外的其他东西,则可以使用:
os.popen("zip -P P4ssw0rd somefolder.zip somefolder/*")
当然,不要忘记import os
事先。
推荐阅读
- python - 没有 Conda 的 Conda environment.yml
- kubernetes - 如何在 yq 中的特定键之后在 yaml 中插入或添加字段
- c# - void* C++ 等效 C#
- python - 如何在 Github 存储库上将 python 数据帧作为 csv 文件加载?
- python - CoreML 模型在应用内更新后没有进行不同的分类
- c++ - C++17 和重载函数
- laravel - “database.php”文件的 Laravel 配置不起作用
- python - 如何在 pygame 程序中关闭 cmd?
- php - 登录页面不起作用导致未知页面
- python - 使用 pandas 提高性能