python - 复制或移动不适用于子进程命令
问题描述
我正在尝试将文件从一个文件夹复制到另一个文件夹。当我从终端尝试以下命令时,它执行得很好。但是当我在子进程命令中插入它时,我没有得到任何错误,但复制根本不起作用。
subprocess.call(["mkdir", "-p", "./build/subfolder/libs"]) # this works
subprocess.call(["find", "./build", "-maxdepth", "4", "-type", "f", "-name", "\"controller\"", "-exec", "cp", "\{\}", "./build/subfolder/libs/controller.a", ";"]) # this doesn't work
subprocess.call(["mkdir", "-p", "./build/subfolder/includes"]) # this works
subprocess.call(["find", "./build", "-maxdepth", "4", "-type", "f", "-name", "\"controller.h\"", "-exec", "cp", "\{\}", "./build/subfolder/includes/", ";"]) # this doesn't work
在终端我使用的是:
find ./build -maxdepth 4 -type f -name "controller.h" -exec cp {} ./build/subfolder/includes/ \;
我不确定我在哪里做错了?
解决方案
不建议提供subprocess.call
这样的“自定义”/“手动”列表。
我试过了shlex.import
,效果很好。
import subprocess
import shlex
subprocess.call(shlex.split("mkdir -p ./build/subfolder/libs"))
subprocess.call(shlex.split('find ./build -maxdepth 4 -type f -name "controller" -exec cp {} ./build/subfolder/libs/controller.a ;'))
subprocess.call(shlex.split("mkdir -p ./build/subfolder/includes"))
subprocess.call(shlex.split('find ./build -maxdepth 4 -type f -name "controller.h" -exec cp {} ./build/subfolder/includes/ ;'))
您可能希望使用 pathlib 模式来创建您的存储库,例如:
from pathlib import Path
import subprocess
import shlex
subfolder = Path("build/subfolder")
libs = subfolder / "libs"
includes = subfolder / "includes"
# Creating folder
libs.mkdir(parents=True)
includes.mkdir(parents=True)
# Finding and copying
...
推荐阅读
- c# - 获取对撞机中的最近点
- php - 使用 AWS Elastic Beanstalk 重定向到 https 不起作用
- boost - 提升地理坐标的 Rtree
- ruby - 在 OmniAuth 的情况下如何在用户创建中处理电子邮件唯一性验证
- arrays - 我的数组比较代码出了什么问题?
- python - 我怎样才能逐一检查列表中的每个项目,中间有延迟?
- javascript - 如何获得背景颜色和颜色不同的字符串?
- css - 如何缩短bulma输入?
- gcloud - G Suite 的 G 云 MX 记录中的首选项和邮件服务器无效记录数据
- angular - Angular 中的 Vue.prototype 等价物是什么?