标签: google-cloud-python

使用 Python 查询 GCP Stackdriver 日志

我正在使用 Python3 查询 Stackdriver 以获取 GCP 日志。不幸的是,具有重要数据的日志条目以“NoneType”而不是“dict”或“str”的形式返回给我。结果“entry.payload”是“None”类型,“entry.payload_pb”有我想要的数据,但是是乱码。

有没有办法让 Stackdriver 以干净的格式返回这些数据,或者有没有办法解析它?如果没有,有没有办法查询比我正在做的更好的数据并产生干净的数据?

我的代码看起来像这样:

#!/usr/bin/python3

from google.cloud.logging import Client, ASCENDING, DESCENDING
from google.oauth2.service_account import Credentials

projectName = 'my_project'
myFilter = 'logName="projects/' + projectName + '/logs/compute.googleapis.com%2Factivity_log"'

client = Client(project = projectName)
entries = client.list_entries(order_by=DESCENDING, page_size = 500, filter_ = myFilter)
for entry in entries:
    if isinstance(entry.payload, dict):
        print(entry.payload)
    if isinstance(entry.payload, str):
        print(entry.payload)
    if isinstance(entry.payload, None):
        print(entry.payload_pb)
Run Code Online (Sandbox Code Playgroud)

“entry.payload_pb”数据总是这样开头:

type_url: "type.googleapis.com/google.cloud.audit.AuditLog"
 value: "\032;\n9gcp-user@my-project.iam.gserviceaccount.com"I\n\r129.105.16.28\0228
Run Code Online (Sandbox Code Playgroud)

google-bigquery google-cloud-logging stackdriver google-cloud-python google-cloud-stackdriver

6
推荐指数
1
解决办法
2023
查看次数

Google云端存储:如何在Python中删除文件夹(递归)

我试图用它的Python库删除GCS中的文件夹及其所有内容(包括子目录).另外我明白GCS实际上没有文件夹(但是前缀?)但是我想知道我怎么能这样做?

我测试了这段代码:

from google.cloud import storage

def delete_blob(bucket_name, blob_name):
    """Deletes a blob from the bucket."""
    storage_client = storage.Client()
    bucket = storage_client.get_bucket(bucket_name)
    blob = bucket.blob(blob_name)

    blob.delete()

delete_blob('mybucket', 'top_folder/sub_folder/test.txt')
delete_blob('mybucket', 'top_folder/sub_folder/')
Run Code Online (Sandbox Code Playgroud)

第一次调用delete_blob工作但不是第二次.我可以递归删除文件夹么?

google-cloud-storage google-cloud-python

6
推荐指数
2
解决办法
2517
查看次数

通过Python中的服务帐户访问Google Cloud Storage的权限

我正在尝试获取一个服务帐户,以便从 Python 脚本中在 Google Cloud Storage 中创建 blob,但我遇到了凭据问题。

1) 我为我的项目创建服务帐户,然后下载 json 格式的密钥文件:

"home/user/.config/gcloud/service_admin.json"
Run Code Online (Sandbox Code Playgroud)

2)我为服务帐户提供必要的凭据(通过子流程中的 gcloud)

 roles/viewer, roles/storage.admin,  roles/resourcemanager.projectCreator, roles/billing.user
Run Code Online (Sandbox Code Playgroud)

然后我想访问GCS中的一个bucket

from google.cloud import storage
import google.auth

credentials, project = google.auth.default()
client = storage.Client('myproject', credentials=credentials)
bucket = client.get_bucket('my_bucket')
Run Code Online (Sandbox Code Playgroud)

不幸的是,这会导致:

google.api_core.exceptions.Forbidden: 403 GET
https://www.googleapis.com/storage/v1/b/my_bucket?projection=noAcl:
s_account@myproject.iam.gserviceaccount.com does not have
storage.buckets.get access to my_bucket
Run Code Online (Sandbox Code Playgroud)

如果我设置环境变量,我的运气会更好一些

export GOOGLE_APPLICATION_CREDENTIALS="home/user/.config/gcloud/service_admin.json"
Run Code Online (Sandbox Code Playgroud)

并重新运行脚本。但是,我希望这一切都在创建帐户的脚本的一个实例中运行,并继续在存储桶中创建必要的文件。如果我知道我的 json 凭证文件在哪里,如何访问 my_bucket。

google-cloud-storage google-cloud-platform google-cloud-python

6
推荐指数
1
解决办法
1万
查看次数

如何通过 Python 以编程方式使用 gcloud 命令

Google 文档在这个主题上有点通用,我发现很难绕过他们使用的不同 API 和术语,所以我想知道是否有人可以给我指出正确的方向。

我正在寻找一种gcloud直接从 Python 调用命令的方法。我已经安装gcloud在我的 Python 环境中,作为一个示例,我想知道如何从 Python 执行以下操作:

gcloud compute copy-files [Source directory or file name] [destination directory of file name]
Run Code Online (Sandbox Code Playgroud)

python google-compute-engine gcloud gcloud-python google-cloud-python

5
推荐指数
1
解决办法
2万
查看次数

使用gcloud-python在Google云端存储中设置元数据

我正在尝试使用文件上传文件到Google云端存储gcloud-python并设置一些自定义元数据属性.为了尝试这个,我创建了一个简单的脚本.

import os

from gcloud import storage

client = storage.Client('super secret app id')
bucket = client.get_bucket('super secret bucket name')

blob = bucket.get_blob('kirby.png')
blob.metadata = blob.metadata or {}
blob.metadata['Color'] = 'Pink'
with open(os.path.expanduser('~/Pictures/kirby.png'), 'rb') as img_data:        
    blob.upload_from_file(img_data)
Run Code Online (Sandbox Code Playgroud)

我可以上传文件内容.上传文件后,我可以从开发者控制台手动设置元数据并检索它.

我无法弄清楚如何以编程方式上传元数据.

python google-cloud-storage gcloud-python google-cloud-python

5
推荐指数
1
解决办法
1917
查看次数

python中的Google Cloud Datastore超时错误

我在Google Cloud Datastore中有一个表,我在其中存储一个小数据结构,该结构用一个Python服务编写,另一个用另一个Python服务读取.我正在使用gcloud版本0.15.0.这是我用来向GCD写入/读取数据的Python代码:

from gcloud import datastore
import datetime
import json
class GCD(object):
def __init__(self, project_id):
    self.client = datastore.Client(project_id)

def put(self, table, key, data):
    with self.client.transaction():
        entity = datastore.Entity(self.client.key(table, key), exclude_from_indexes=['context'])
        entity.update({'context': json.dumps(data), 'created': datetime.datetime.utcnow(), 'done': True})
        try:
            self.client.put(entity)
        except Exception as e:
            print "GCD save failed with exception: %s" % e
    return None

def get(self, table, key):
    entity_key = self.client.key(table, key)
    entity = None
    try:
        entity = self.client.get(entity_key)
    except Exception as e:
        print "GCD read failed with exception: %s" …
Run Code Online (Sandbox Code Playgroud)

python google-cloud-datastore gcloud-python google-app-engine-python google-cloud-python

5
推荐指数
1
解决办法
591
查看次数

加载架构json文件以创建表或作业架构

如果我已经有模式文件,例如:schema.json.如何使用google-cloud-python API加载文件以创建表或作业架构?

python-2.7 google-bigquery google-cloud-python

5
推荐指数
1
解决办法
495
查看次数

尽管已安装在venv中,但未找到google-cloud-storage分配

就像标题中一样,当运行应用服务器时,我得到一个DistributionNotFound异常google-cloud-storage

文件“ / home / [me] / Desktop / apollo / lib / pkg_resources / init .py”,第867行,解决了升高DistributionNotFound(req,requireers)DistributionNotFound的问题:找不到“ google-cloud-storage”分布应用程序要求

pip show google-cloud-storage在我的venv的站点包目录中,运行发现它很好。似乎一切也都井井有条python -c "import sys; print('\n'.join(sys.path))"。如果需要的话,cloud SDK目录也位于其中。

不知道下一步该怎么做。

google-cloud-storage google-cloud-platform google-cloud-python

5
推荐指数
1
解决办法
1017
查看次数

google-speech-api 并使语音上下文有效

我已经在 Python 中设置了一个同步识别脚本,该脚本按预期工作,以返回我发送到 Google Speech API 的各种音频文件的成绩单。但是,我似乎无法获得语音上下文提示(Python 中的语音上下文;Google 文档中的“短语提示/语音上下文”)来做任何有用的事情。我有一个音频文件,其中扬声器清楚地说出“健康”这个词,但它每次都被转录为“房子”,尽管明确告诉它寻找“健康”这个词,如下面的代码所示,它没有找到。有什么建议可以使此功能有效吗?

config = types.RecognitionConfig(
    encoding=enums.RecognitionConfig.AudioEncoding.LINEAR16,
    language_code='en-US',
    speech_contexts=[speech.types.SpeechContext(
        phrases=['health'])]
    )
Run Code Online (Sandbox Code Playgroud)

谢谢!

speech-recognition google-speech-api google-cloud-python

5
推荐指数
0
解决办法
1717
查看次数

`vendor.add` 不会向 dev_appserver.py 公开依赖项

将旧项目从 2.7 和 Ubuntu 18.04 [逐步、Python 3.10 和 22.04 next\xe2\x80\xa6 然后 Flask!] 从供应商依赖项迁移到requirements.txt. 从项目根目录中删除了依赖项并在我的requirements.txt.

\n

我的requirements.txtcontainsgoogle-cloud-storage==1.44.0和 wasvenv-2-7/bin/python -m pip install -t lib -r requirements.txt与 aappengine_config.py位于同一目录中app.yaml

\n
# From https://cloud.google.com/appengine/docs/legacy/standard/python/tools/using-libraries-python-27\nimport os\n\nfrom google.appengine.ext import vendor\n\nvendor.add(\'lib\')\nvendor.add(os.path.join(os.path.dirname(os.path.realpath(__file__)), \'lib\'))\n
Run Code Online (Sandbox Code Playgroud)\n

我该如何解决这个错误?- 尝试过,venv-2-7/bin/python -c \'import google.cloud.storage\'有效,但是:

\n
$ venv-2-7/bin/python /google-cloud-sdk/platform/google_appengine/dev_appserver.py --host 127.0.0.1 .\n
Run Code Online (Sandbox Code Playgroud)\n

[来自 PyCharm 和手动] 的错误:

\n
ImportError: No module named google.cloud.storage\n
Run Code Online (Sandbox Code Playgroud)\n

EDIT0:根据评论请求包含更多信息[如下]:

\n
app.yaml
\n
$ …
Run Code Online (Sandbox Code Playgroud)

python google-app-engine google-app-engine-python google-cloud-python

5
推荐指数
1
解决办法
214
查看次数