首页 > 解决方案 > 复制或移动不适用于子进程命令

问题描述

我正在尝试将文件从一个文件夹复制到另一个文件夹。当我从终端尝试以下命令时,它执行得很好。但是当我在子进程命令中插入它时,我没有得到任何错误,但复制根本不起作用。

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/ \;

我不确定我在哪里做错了?

标签: pythonsubprocess

解决方案


不建议提供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
...

推荐阅读