例如,如果我当前的 Colab 实例登录为
[email protected]
是否可以在 ipython 中获取名称“myColab”?
执行此操作的命令是什么?
我想这样做是因为我可能运行两个Colab,它们生成文件,我想用Colab帐户名标记这些文件,这样我就知道哪个帐户生成这些文件。
默认情况下,后端不对任何特定用户进行身份验证。但是,如果您已经完成了
gcloud auth
流程,您可以像这样检索电子邮件地址:
https://colab.research.google.com/drive/1VVWs_pcjjz2vg0H2Ti6-12FzcCojRF6a
关键片段是:
import requests
gcloud_token = !gcloud auth print-access-token
gcloud_tokeninfo = requests.get('https://www.googleapis.com/oauth2/v3/tokeninfo?access_token=' + gcloud_token[0]).json()
print(gcloud_tokeninfo['email'])
或者只需运行以下命令:
!gcloud config get-value account
我试图让当前用户通过 GDrive 身份验证登录。我不想推送另一个身份验证,只是为了记录名称。我相信OP也在尝试同样的事情。
我的理论是,使用谷歌驱动器登录,创建一个文件,然后读取文件的创建者。这没有按预期运行,它只返回 root:root。但这可能会激发一个比我更了解 python 和 colab 的人如何实现这项工作的想法。
如果您在目录
MyDrive
中创建文件,GDrive 可以看到该文件,并且显示所有者是 Me
,将鼠标悬停在我上方会显示电子邮件帐户。 GDrive 知道是谁制造的。我只是不知道如何让 colab 输出真正的文件所有者,即使对于 MyDrive
中已经存在的文件也是如此。我认为这与象征性的坐骑有关,但是..必须有办法。
代码
print("test", file=open("owner.txt", "a"))
from pathlib import Path
path = Path("owner.txt")
owner = path.owner()
group = path.group()
print(f"{path.name} is owned by {owner}:{group}")
输出
owner.txt is owned by root:root
首先,使用 Google 帐户对用户进行身份验证,这是在 Colab 环境中访问 Google Cloud 服务和 API 所必需的:
from google.colab import auth
auth.authenticate_user()
然后,使用下面的代码向 Google OAuth2 令牌信息端点发送请求(使用从
gcloud auth print-access-token
获取的令牌)以获取有关令牌的信息,包括 email address
:
import requests
gcloud_token = !gcloud auth print-access-token
gcloud_tokeninfo = requests.get('https://www.googleapis.com/oauth2/v3/tokeninfo?access_token=' + gcloud_token[0]).json()
print(gcloud_tokeninfo['email'])