首页 > 解决方案 > 在 python 脚本中运行 gcloud auth 和 gsutil 命令

问题描述

我正在尝试使用子进程在 python 脚本中运行三个 shell 命令。我在其他线程上找到了一些代码。我没有收到任何错误,但文件没有上传到存储桶。如果我打开一个 cmd 窗口并输入所有三个文件,则该文件成功推送到存储桶。我正在使用 Python 3.6。

a = 'gcloud auth activate-service-account --key-file=C:\key\key.json'
b = 'cd C:\requests'
c = 'gsutil cp *.txt gs://request/upload/'

command = a; b; c

subprocess.run(command, stdout=subprocess.PIPE, shell=True)

标签: subprocessgcloudgsutil

解决方案


您没有收到任何错误,因为您没有捕获打印错误的输出流,stderr. Python 3.7+ 也要求capture_output参数为真,但看起来您使用的是 Python 3.6。

另外,看看这一行:

command = a; b; c

您将字符串存储a到变量command中。然后,您只是评估接下来的两个字符串,它基本上什么都不做;即该行正在执行三个语句:

command = a
b
c

我认为您可能想将它们连接成一个字符串并将其作为第一个参数传递给subprocess.run()

command = '{0}; {1}; {2}'.format(a, b, c)

另外,还有两点需要注意:

  • 如果一个命令依赖于成功的前一个命令,您应该使用&&而不是加入您的命令;
  • 您通常不应该依赖cding 进入目录并在 shell 脚本中使用相对路径;尽可能使用绝对路径。

推荐阅读