当 Python 3.5.2 调用 gsutil rsync 时返回错误,但从命令行可以

Posted

技术标签:

【中文标题】当 Python 3.5.2 调用 gsutil rsync 时返回错误,但从命令行可以【英文标题】:gsutil rsync returns error when called by Python 3.5.2, but okay from command line 【发布时间】:2017-04-22 18:43:24 【问题描述】:

我有一个 gsutil rsync 调用,它可以在命令行中正常工作,但是当被 subprocess.run 调用时,它会返回一个 stderr 'CommandException: rsync 命令最多接受 2 个参数。'

我在 gsutil 文档的任何地方都没有发现这个限制。

我的参数是 ['/Users/username/google-cloud-sdk/bin/gsutil', 'rsync', '-CderU', '-x' './[.].$', '/ Users/username/Documents/_Projects/Active Projects/myFolder', 'gs://myBucket/myFolder', '2>>', '/Users/username/Library/Logs/gCloud/2016_12_07.log']

当我通过 shlex 运行我的完整命令时,结果如上所示。我还将“-CderU”和“-x”组合成“-CderUx”,但得到相同的结果。

我正在运行 Python 3.5.2,并且在 Mac OS 10.11.6 下拥有最新版本的 gsutil。

任何指导表示赞赏。

【问题讨论】:

【参考方案1】:

gsutil (尚)不支持 Python 3.x.x - 目前仅支持 Python 2.7。所以你需要使用那个版本的 Python。它记录在 here 等其他地方。

【讨论】:

以上是关于当 Python 3.5.2 调用 gsutil rsync 时返回错误,但从命令行可以的主要内容,如果未能解决你的问题,请参考以下文章

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

如果使用 python 和子进程从 pycharm 调用 gsutil 不起作用,“无法导入名称 _common”

在计算引擎上从 PHP 的 exec() 调用时,gsutil 不起作用

python 子进程不能很好地与 gsutil 复制/移动命令一起使用

带有 python 入口点的 Google Cloud Build gsutil

您可以将 keyfile.json 传递给 gsutil 吗?