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:singlefind
命令应该更快:它一次复制多个文件。纯Python解决方案应该更具可移植性(它不需要find
,cp
命令)。