从groovy脚本运行gsutil:找不到Python可执行文件

时间:2017-01-31 22:56:37

标签: python groovy google-play gsutil

我有一个groovy脚本,可以从各个公司获取有关我所有应用程序销售的数据,并为我生成报告。这一直运作良好,但我已迁移到新服务器,现在我遇到了问题。

要从Google Play下载Android应用销售,您必须使用gsutil命令从Google存储中复制销售数据。所以,在我的groovy脚本中,我执行该命令。它在我的旧服务器上工作正常,当我在新服务器上的shell中发出相同的命令时,它可以工作。

它不会在groovy脚本中对新服务器起作用。这是我得到的错误:

$ ./fetch_googleplay_report.groovy 2017-01-29
Fetching 2017-01-29 for Android Google Play
Running command: /usr/bin/gsutil cp -r gs://pubsite_prod_rev_XXXXXXXXXXXXX/sales/salesreport_201701.zip .
gsutil command output: 
gsutil command error output: which: no python2 in ((null))
which: no python2.7 in ((null))
Traceback (most recent call last):
  File "/usr/lib64/google-cloud-sdk/bin/bootstrapping/gsutil.py", line 75, in <module>
    main()
  File "/usr/lib64/google-cloud-sdk/bin/bootstrapping/gsutil.py", line 59, in main
    'platform/gsutil', 'gsutil', *args)
  File "/usr/lib64/google-cloud-sdk/bin/bootstrapping/bootstrapping.py", line 45, in ExecutePythonTool
    execution_utils.ArgsForPythonTool(_FullPath(tool_dir, exec_name), *args))
  File "/usr/lib64/google-cloud-sdk/lib/googlecloudsdk/core/execution_utils.py", line 170, in ArgsForPythonTool
    python_executable = kwargs.get('python') or GetPythonExecutable()
  File "/usr/lib64/google-cloud-sdk/lib/googlecloudsdk/core/execution_utils.py", line 59, in GetPythonExecutable
    raise ValueError('Could not find Python executable.')
ValueError: Could not find Python executable.

$ which python
/usr/bin/python
$ which python2
/usr/bin/python2

Python肯定是在我的路径中安装的,但是当我的groovy脚本调用gsutil时,它似乎无法找到它。我从堆栈跟踪中猜测,当它说no python2 in ((null))时,它意味着它的路径为空。我不确定。

以下是执行命令的groovy代码段:

def cmd = "/usr/bin/gsutil cp -r gs://pubsite_prod_rev_XXXXXXXXXXX/sales/$reportfilename .";

println("Running command: $cmd")

def out = new StringBuffer(), err = new StringBuffer()
def proc = cmd.execute([], incomingdir)
proc.consumeProcessOutput(out, err)
proc.waitForOrKill(5000)

println("gsutil command output: $out")
println("gsutil command error output: $err")

编辑:如果我将gsutil命令移动到一个shell脚本中,我专门用我的.bash_profile来设置我的PATH并让groovy脚本调用那个shell脚本,那么文件下载就好了。

因此,这似乎是从groovy脚本调用gsutil的问题。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

在这种情况下,应在您的Google Cloud SDK工具的执行之前加上CLOUDSDK_PYTHON=/usr/bin/python,例如。

CLOUDSDK_PYTHON=/usr/bin/python gsutil cp -r ...

此替代方法来自于hidekuro github.com/GoogleCloudPlatform/gsutil/issues/402

相关问题