Jon*_*Jon 3 python unix shell scripting
我似乎无法subprocess.Popen使用通配符从Python中使用'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
Run Code Online (Sandbox Code Playgroud)
输出来自print params:
['mv', '/full_path_to_folder_source/*.nib', '/full_path_to_folder_target/']
Run Code Online (Sandbox Code Playgroud)
这里的路径只是为了便于阅读而缩短,但我保证它们是有效的.从终端调用这个完全相同的命令可以工作但是在python中调用会给出关于不正确使用的标准消息mv:
usage: mv [-f | -i | -n] [-v] source target
mv [-f | -i | -n] [-v] source ... directory
Run Code Online (Sandbox Code Playgroud)
我读,为了让通配符来工作,我需要的参数shell=True的Popen调用,这是存在的.任何想法为什么这不起作用?删除shell=True最终将星号视为预期的硬文字.
使用字符串而不是数组:
params = "mv /full_path_to_folder_source/*.nib /full_path_to_folder_target/"
Run Code Online (Sandbox Code Playgroud)
通过数组表单指定参数时,参数'/full_path_to_folder_source/*.nib'将传递给mv.您希望强制bash扩展参数,但Popen不会通过shell传递每个参数.