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

从groovy脚本运行gsutil:找不到Python可执行文件,python,groovy,google-play,gsutil,Python,Groovy,Google Play,Gsutil,我有一个groovy脚本,它可以获取我在不同公司的所有应用程序销售数据,并为我生成报告。这一直运行得很好,但是我已经迁移到了一个新的服务器,现在我遇到了一个问题 要从Google Play下载Android应用程序销售,您必须使用gsutil命令从Google存储中复制销售数据。因此,在我的groovy脚本中,我执行该命令。它在我的旧服务器上运行得很好,当我在新服务器上的shell中发出相同的命令时,它就工作了 在groovy脚本中,它无法在新服务器上工作。以下是我得到的错误: $ ./fetc

我有一个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
编辑:如果我将gsutil命令移动到一个shell脚本中,在该脚本中我专门为.bash_配置文件提供源代码以设置路径,并让groovy脚本调用该shell脚本,那么该文件就可以正常下载


因此,从groovy脚本调用gsutil似乎确实存在问题。有什么想法吗?

在这种情况下,您应该使用
CLOUDSDK\u PYTHON=/usr/bin/PYTHON
作为执行Google Cloud SDK工具的前缀,例如

CLOUDSDK_PYTHON=/usr/bin/python gsutil cp -r ...
此解决方法来自中
.

CLOUDSDK\u PYTHON变量在shell中的设置是否不同,而在groovy脚本中的设置是否不同?如果不是,我认为groovy脚本中的系统路径不同是正确的。这似乎与gsutil/gcloud无关-您需要确保python在路径上。python肯定在我的shell中的路径中(如
which
命令所示),但是如何在groovy脚本中控制路径环境?我已经将shell中的
CLOUDSDK\u PYTHON
设置为指向
/usr/bin/python2
,但是在执行groovy脚本时,我在shell中设置的环境变量显然也不可用。。。但这一切都在我的旧服务器上运行。我很困惑,这实际上是一个关于groovy环境变量的问题(因为脚本中的“哪个”不起作用)。也许有帮助?另一篇SO帖子上的答案只是建议将缺少的环境变量作为参数传递,但我的问题是
gsutil
是试图访问环境的脚本,它不将这些内容作为参数:(啊,我现在明白了。现在的问题似乎是如何将环境从groovy传递到Python.cmd.execute的第一个参数是环境,所以您可以不传递一个空列表,而是按照中的描述包含它吗?
CLOUDSDK_PYTHON=/usr/bin/python gsutil cp -r ...