如何从python脚本成功调用gsutil rsync?

时间:2018-10-16 04:35:07

标签: python google-cloud-platform subprocess gsutil

我正在尝试执行以下行

class UserMailer < ActionMailer::Base
  def welcome_email(user)
    recipients    user.email
    from          "test@gmail.com"
    subject       "Test Mail"
    sent_on       Time.now
    body          "Welcome to Our System"
    content_type  "application/pdf"

  end
end

在python中。在shell终端中运行此行时,它可以正常工作。但是,我试图通过使用以下行在python脚本中运行它。

gsutil -m rsync s3://input gs://output

但是它永远挂着。它输出以下内容:

subprocess.Popen(["gsutil", "-m", "rsync", "s3://input", "gs://output"])

bash命令成功打印:

Building synchronization state...
Starting synchronization...

文件显示在我的gs存储桶中

1 个答案:

答案 0 :(得分:2)

我猜这是因为最后两行可能是写入stderr而不是stdout的。您可以尝试使用对Popen的调用作为上下文管理器,然后再调用communicate()来读取输出流吗?

proc = subprocess.Popen(["gsutil", "-m", "rsync", "s3://input", "gs://output"])
try:
    outs, errs = proc.communicate(timeout=15)
    # now you can do something with the text in outs and errs
except TimeoutExpired:
    proc.kill()
    outs, errs = proc.communicate()