python - 使用 Python 子进程模块从命令行运行 BigQuery - 致命命令 'bq ls redacted:dataid' 未知
问题描述
我需要使用 Python 的 Subprocess 模块通过 Google Cloud SDK 运行 BigQuery CLI 命令。当我从命令行运行以下命令时,事情会按我的预期工作:
我曾尝试在以下场景中运行此 bq 命令但没有成功:
- 与 Windows cmd.exe 文件的完整路径一起使用
- 与 bq.cmd 文件的完整路径一起使用
- 在第一次运行 bq.cmd 文件的完整路径后,仅使用 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' 以获得帮助
谢谢!
解决方案
想通了,我需要分别列出我的命令的每个元素:
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)
推荐阅读
- ios - 如何在领域数据库中观察对象计数
- angular - 通过 *ngFor 为每个角度材料步进步骤提供不同的组件
- game-physics - Godot中2D物理的测量单位(单位比例)?
- here-api - 获取或计算整个城市(尤其是莫斯科)的拥堵系数
- sql - 触发器从另一个表中删除行
- gmail-api - 如何让我的 php 应用程序从不要求 Gmail API 验证码?
- amazon-web-services - 除非我允许 NACL 出站中的所有 TCP 连接,否则无法连接到 EC2
- kotlin - 为什么 Kotlin 使用内部而不是包?
- rmi - RMI 通过引用调用而不实现 Serializable
- ruby-on-rails - 是否可以通过 pdf-reader 读取 rubyzip 中的 pdf 文件?