我似乎无法在Python subprocess.Popen中使用通配符来执行'mv‘命令。
代码:
def moveFilesByType(source, destination, extension):
params = []
params.append("mv")
params.append(source + "/*." + extension)
params.append(destination + "/")
print params
pipe = subprocess.Popen(params, shell=True, stdout=PIPE)
result, err = pipe.communicate()
return resultprint params的输出
['mv', '/full_path_to_folder_source/*.nib', '/full_path_to_folder_target/']这里的路径只是为了可读性而缩短,但我保证它们是有效的。从终端调用这个完全相同的命令是可行的,但是在python中调用会给出有关不正确使用mv的标准消息。
usage: mv [-f | -i | -n] [-v] source target
mv [-f | -i | -n] [-v] source ... directory我读到为了使通配符起作用,我需要在Popen调用中使用参数shell=True,这个参数已经存在。你知道为什么这个不起作用吗?删除shell=True最终会像预期的那样将星号视为硬文字。
发布于 2011-09-17 05:17:58
使用字符串而不是数组:
params = "mv /full_path_to_folder_source/*.nib /full_path_to_folder_target/"当您通过数组形式指定参数时,参数'/full_path_to_folder_source/*.nib'将传递给mv。您希望强制bash扩展参数,但Popen不会通过外壳传递每个参数。
发布于 2011-09-17 05:36:24
您可以使用模块shutil和glob在不启动新进程的情况下完成此操作:
import glob
import shutil
def moveFilesByType(source, destination, extension):
for path in glob.glob(source + "/*." + extension):
shutil.move(path, destination)发布于 2011-09-17 05:18:44
为此,您不需要使用子进程,请查看shutil.copytree
https://stackoverflow.com/questions/7450456
复制相似问题