【问题标题】:python subprocess won't play nicely with gsutil copy/move commandspython 子进程不能很好地与 gsutil 复制/移动命令一起使用
【发布时间】: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 正在以某种方式破坏命令......

我总是可以低效地为每种文件类型重复命令,但更愿意深入了解!

【问题讨论】:

    标签: python terminal subprocess gsutil


    【解决方案1】:

    看来,/bin/sh(默认 shell)不支持 {mp4,jpg} 语法。 通过 executable='/bin/bash',将其作为 bash 命令运行。

    您也可以在没有 shell 的情况下运行命令,例如,使用 globfnmatch 模块来获取文件名以构造 gsutil 命令。注意:在这种情况下,您应该将命令作为列表传递。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多