首页 > 解决方案 > 使用 Python 子进程模块从命令行运行 BigQuery - 致命命令 'bq ls redacted:dataid' 未知

问题描述

我需要使用 Python 的 Subprocess 模块通过 Google Cloud SDK 运行 BigQuery CLI 命令。当我从命令行运行以下命令时,事情会按我的预期工作:

在此处输入图像描述

我曾尝试在以下场景中运行此 bq 命令但没有成功:

这是我列出的第二个示例中的代码,因为我认为它最接近正确?

  list_tables_bigquery = 'bq ls redacted:dataid'

    try:
        process = subprocess.Popen(["C:\\Users\\redacted.user\\AppData\\Local\\Google\Cloud SDK\\google-cloud-sdk\\bin\\bq.cmd",list_tables_bigquery],stdout=subprocess.PIPE, stderr = subprocess.STDOUT,shell=True,universal_newlines=True)
    except Exception as error:
        print(error)

powershell_communication = process.communicate()[0]

print(powershell_communication)

这是错误消息:

致命命令 'bq -q ls redacted:dataid' 未知
运行 'bq.py help' 以获得帮助

谢谢!

标签: pythonsubprocessbq

解决方案


想通了,我需要分别列出我的命令的每个元素:

try:
    #open bq program
    process = subprocess.Popen(["C:\\Users\\redacted.user\\AppData\\Local\\Google\Cloud SDK\\google-cloud-sdk\\bin\\bq.cmd",'ls', 'redacted:id'],stdout=subprocess.PIPE, stderr=subprocess.STDOUT,shell=True,universal_newlines=True)
except Exception as error:
    print(error)

bq_communication = process.communicate()[0]
print(powershell_communication)

推荐阅读