我有一个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的问题。有什么想法吗?
答案 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。