如何通过gcloud终端工具调用GCP VM作为后端运行本地Python文件?
实现方案
完全可以通过gcloud compute ssh自带的远程命令执行能力实现需求,无需手动上传本地Python文件到GCP VM,也不需要额外的自定义命令,具体方案如下:
方案1:单Python文件无额外本地依赖场景(最常用)
直接将本地Python文件内容通过标准输入传递给远程VM的Python解释器执行,全程不会在VM上留存文件副本,命令格式如下:
gcloud compute ssh --zone <替换为你的VM可用区> <替换为你的VM名称> -- python3 - < test.py
命令逻辑说明:
--后面的内容为要在远程VM上执行的命令python3 -表示Python解释器从标准输入读取代码执行< test.py是本地文件输入重定向,将本地test.py的内容直接传递给远程的Python进程
方案2:需要给Python脚本传递运行参数的场景
如果你的脚本需要接收参数,可通过--command参数封装执行逻辑:
gcloud compute ssh --zone <替换为你的VM可用区> <替换为你的VM名称> --command "python3 - 参数1 参数2" < test.py
执行效果和你在本地运行python3 test.py 参数1 参数2完全一致,参数会正常传递给sys.argv。
方案3:Python脚本依赖多个本地文件的场景
如果你的脚本需要读取同目录下其他本地文件,可先通过SSHFS将本地目录挂载到远程VM的指定路径,远程VM运行时直接读取挂载路径下的文件即可,无需上传任何文件:
- 挂载本地目录到远程VM:
sshfs <替换为本地待挂载的目录绝对路径> <替换为你的VM名称>:<替换为远程VM上的挂载路径> -o ssh_command="gcloud compute ssh --zone <替换为你的VM可用区>"
- 执行脚本时直接指定远程挂载路径下的文件即可:
gcloud compute ssh --zone <替换为你的VM可用区> <替换为你的VM名称> -- python3 <替换为远程挂载路径下的对应py文件路径>
- 用完后卸载挂载:
- 本地为Linux系统:
fusermount -u <替换为远程VM上的挂载路径> - 本地为MacOS系统:
umount <替换为远程VM上的挂载路径>
注意事项
- 需提前确保远程VM的Python环境中已经安装了你脚本依赖的所有第三方库
- 如果脚本需要输出文件,输出结果默认会保存在远程VM上,如需保存到本地可在执行命令时增加输出重定向,比如:
gcloud compute ssh --zone 可用区 VM名 -- python3 - < test.py > 本地结果文件路径
内容的提问来源于stack exchange,提问作者Mehedee Hassan
相关产品推荐
相关产品推荐

