Python 2.7 如何在python中使用子进程复制文件?

Python 2.7 如何在python中使用子进程复制文件?,python-2.7,subprocess,Python 2.7,Subprocess,我有一个文件列表: file_list=['test1.txt','test2.txt','test3.txt'] 我想找到这些文件并将其复制到目标文件夹。我有以下代码: for files in file_list: subprocess.call(["find", "test_folder/", "-iname", files, "-exec", "cp", "{}",

我有一个文件列表:

file_list=['test1.txt','test2.txt','test3.txt']
我想找到这些文件并将其复制到目标文件夹。我有以下代码:

for files in file_list:
    subprocess.call(["find", "test_folder/",
                    "-iname", files,
                    "-exec", "cp", "{}",
                    "dest_folder/",
                    "\;"])
但是,我不断地得到错误:

find: missing argument to `-exec
shell命令如下所示:

$find test_folder/-iname'test1.txt'-exec cp{}dest_folder/\


我做错什么了吗?

你不需要逃过分号。以下是对我有效的方法:

import shlex
import subprocess

file_list = ['test1.txt','test2.txt','test3.txt']

cmd = 'find test_folder -iname %s -exec cp {} dest_folder ;'
for files in file_list:
    subprocess.Popen(shlex.split(cmd % files))
另见:


希望这有帮助。

你不需要逃避争论
subprocess
模块调用
find
命令,而不使用shell。将
“\;”
替换为
“;”
,您的命令将按原样工作

您可以将搜索合并到单个命令中:

from subprocess import call

expr = [a for file in file_list for a in ['-iname', file, '-o']]
expr.pop() # remove last `-o`
rc = call(["find", "test_folder/", "("] + expr + [")", "-exec", 
           "cp", "-t", "dest_folder/", "--", "{}", "+"])
如果需要,还可以将
expr
列表合并到单个
-iregex
参数中

您不需要
find
命令;您可以使用
os.walk
re.match
shutil.copy
在纯Python中实现复制:

import os
import re
import shutil

found = re.compile('(?i)^(?:%s)$' % '|'.join(map(re.escape, file_list))).match
for root, dirs, files in os.walk('test_folder/'):
    for filename in files:
        if found(filename):
            shutil.copy(os.path.join(root, filename), "dest_folder/")

我现在没有收到任何错误,但是目标文件夹没有复制的文件。有没有办法查看正在运行的内容?:)我现在没有收到任何错误,但是目标文件夹没有复制的文件。是否有打印正在运行的子流程的方法?:)@姆萨基亚,嗯,这对我有用。你可以在这里找到记录命令的方法:@msakya将
shell=True
参数添加到
Popen
会有什么不同吗?这很奇怪,我不确定到底发生了什么。放置
shell=True
没有帮助。是的,你在第一个问题上是对的,我在一个与代码无关的固有错误后让它工作。后者比前者好吗?谢谢@msakya:single
find
命令应该更快:它一次复制多个文件。纯Python解决方案应该更具可移植性(它不需要
find
cp
命令)。