python 子进程不能很好地与 gsutil 复制/移动命令一起使用
Posted
技术标签:
【中文标题】python 子进程不能很好地与 gsutil 复制/移动命令一起使用【英文标题】:python subprocess won't play nicely with gsutil copy/move commands 【发布时间】:2015-05-10 14:41:28 【问题描述】:在 Python 中,我使用 subprocess 调用 gsutil 复制和移动命令,但目前无法选择多个扩展。
相同的 gsutil 命令在终端上有效,但在 python 中无效:
cmd_gsutil = "sudo gsutil -m mv gs://xyz-ms-media-upload/*.mp4,jpg gs://xyz-ms-media-upload/temp/"
p = subprocess.Popen(cmd_gsutil, shell=True, stderr=subprocess.PIPE)
output, err = p.communicate()
如果说有四种文件类型要移动但存储桶为空,则终端返回的 gsutil 错误为:
4 files/objects could not be transferred.
而通过子进程运行时返回的错误是:
1 files/objects could not be transferred.
很明显 subprocess 正在以某种方式破坏命令......
我总是可以低效地为每种文件类型重复命令,但更愿意深入了解!
【问题讨论】:
【参考方案1】:看来,/bin/sh
(默认 shell)不支持 mp4,jpg
语法。
通过 executable='/bin/bash'
,将其作为 bash 命令运行。
您也可以在没有 shell 的情况下运行命令,例如,使用 glob
或 fnmatch
模块来获取文件名以构造 gsutil
命令。注意:在这种情况下,您应该将命令作为列表传递。
【讨论】:
以上是关于python 子进程不能很好地与 gsutil 复制/移动命令一起使用的主要内容,如果未能解决你的问题,请参考以下文章
当 sleep() 不能很好地与警报一起工作时,我还能做啥“睡眠”?
使用 python 子进程在实例上运行 gsutil - 访问权限?
ffmpeg xfade 不能很好地与 crossfade 配合使用