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 的情况下运行命令,例如,使用 globfnmatch 模块来获取文件名以构造 gsutil 命令。注意:在这种情况下,您应该将命令作为列表传递。

【讨论】:

以上是关于python 子进程不能很好地与 gsutil 复制/移动命令一起使用的主要内容,如果未能解决你的问题,请参考以下文章

当 sleep() 不能很好地与警报一起工作时,我还能做啥“睡眠”?

许可组件不能很好地与 DI 设计配合使用

使用 python 子进程在实例上运行 gsutil - 访问权限?

ffmpeg xfade 不能很好地与 crossfade 配合使用

Google Drive API 不能很好地与 ProGuard (NPE) 配合使用

iPhone不能很好地与带有CSS的标题一起使用?