【发布时间】:2011-11-19 00:15:33
【问题描述】:
我似乎无法使用通配符从 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 result
print 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 最终会将星号视为预期的硬文字。
【问题讨论】:
-
当然
shutil.copytree是更好的选择,你也可以使用glob在shell环境中实现通配符的类似功能。
标签: python shell unix scripting