首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么Python3 Popen不能使用通配符复制文件

Python3中的Popen是一个用于执行外部命令的函数,它允许我们与子进程进行交互。然而,Popen并不支持直接使用通配符复制文件的操作。

通配符是一种用于匹配文件名的特殊字符,比如"*"代表任意字符,"?"代表任意单个字符。在命令行中,我们可以使用通配符来批量选择文件进行操作,比如复制多个文件。

然而,在Python3的Popen中,通配符不会被自动解析和扩展。这是因为Popen函数在执行外部命令时,会将命令作为一个字符串传递给操作系统的shell来执行。而通配符的解析和扩展是由shell来完成的,而不是由Popen函数。

为了解决这个问题,我们可以使用Python的glob模块来获取符合通配符模式的文件列表,然后使用Popen来逐个复制文件。下面是一个示例代码:

代码语言:txt
复制
import glob
import subprocess

# 获取符合通配符模式的文件列表
file_list = glob.glob('/path/to/files/*.txt')

# 逐个复制文件
for file in file_list:
    subprocess.Popen(['cp', file, '/path/to/destination/'])

在上面的代码中,我们首先使用glob.glob函数获取符合通配符模式"/path/to/files/*.txt"的文件列表。然后,我们使用Popen函数逐个复制文件,其中['cp', file, '/path/to/destination/']是复制命令的参数列表。

需要注意的是,由于Popen函数是非阻塞的,所以在复制文件时可能会出现并发执行的情况。如果需要等待所有复制操作完成后再继续执行后续代码,可以使用Popen对象的wait方法。

总结起来,Python3的Popen函数不能直接使用通配符复制文件,但我们可以通过结合glob模块和Popen函数来实现类似的功能。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Python 文件复制&按目录树结构拷贝&批量删除目录及其子目录下的文件

#!/usr/bin/env/ python # -*- coding:utf-8 -*- __author__ = 'shouke' import os import subprocess # 复制文件或目录到指定目录(非自身目录) def copy_dir_or_file(src, dest): if not os.path.exists(dest): print('目标路径:%s 不存在' % dest) return [False, '目标路径:%s 不存在' % dest] elif not os.path.isdir(dest): print('目标路径:%s 不为目录' % dest) return [False, '目标路径:%s 不为目录' % dest] elif src.replace('/', '\\').rstrip('\\') == dest.replace('/', '\\').rstrip('\\'): print('源路径和目标路径相同,无需复制') return [True,'源路径和目标路径相同,不需要复制'] if not os.path.exists(src): print('源路径:%s 不存在' % src) return [False, '源路径:%s 不存在' % src] # /E 复制目录和子目录,包括空的 /Y 无需确认,自动覆盖已有文件 args = 'xcopy /YE ' + os.path.normpath(src) + ' ' + os.path.normpath(dest) # 注意:xcopy不支持 d:/xxx,只支持 d:\xxxx,所以要转换 try: with subprocess.Popen(args, shell=True, universal_newlines = True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) as proc: output = proc.communicate() print('复制文件操作输出:%s' % str(output)) if not output[1]: print('复制目标文件|目录(%s) 到目标目录(%s)成功' % (src, dest)) return [True,'复制成功'] else: print('复制目标文件|目录(%s) 到目标目录(%s)失败:%s' % (src, dest, output[1])) return [False,'复制目标文件|目录(%s) 到目标目录(%s)失败:%s' % (src, dest, output[1])] except Exception as e: print('复制目标文件|目录(%s) 到目标目录(%s)失败 %s' % (src, dest, e)) return [False, '复制目标文件|目录(%s) 到目标目录(%s)失败 %s' % (src, dest, e)] # 删除指定目录及其子目录下的所有子文件,不删除目录 def delete_file(dirpath): if not os.path.exists(dirpath): print('要删除的目标路径:%s 不存在' % dirpath) return [False, '要删除的目标路径:%s 不存在' % dirpath] elif not os.path.isdir(dirpath): print('要删除的目标路径:%s 不为目录' % dirpath) return [False, '要删除的目标路径:%s 不为目录' % dirpath] # 注意:同xcopy命令,del也不支持 d:/xxxx,Linux/Unix路径的写法,只支持d:\xxx windows路径的写法 args = 'del /F/S/Q ' + os.path.normpath(dirpath) # /F 强制删除只读文件。 /S 删除所有子目录中的指定的文件。 /Q 安静模式。删除前,不要求确认 try: with subprocess.Popen(args, shell=True, universal_newlines = True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) as proc:

02
领券