Windows上的Bigquery命令行工具

时间:2015-02-11 21:16:44

标签: python subprocess google-bigquery

这可能很简单,但很长一段时间我都收到了这个错误!

在Windows和python 2.7上

  

导入子流程

     

p = subprocess.Popen([" C:\ Program Files \ Google \ Cloud   SDK \谷歌云-SDK \ BIN \ BQ"])

追踪(最近一次通话):   文件"",第1行,in   文件" C:\ Python27 \ lib \ subprocess.py",第710行, init     errread,errwrite)   文件" C:\ Python27 \ lib \ subprocess.py",第958行,在_execute_child中     STARTUPINFO) WindowsError:[错误2]系统找不到指定的文件

当我使用bq从命令提示符正常运行时,它运行得很好。 我错过了subprocess和bq。

由于

编辑: 在尝试了下面提供的几个解决方案后,我发现当我使用" shell = True"大多数命令都适用于Windows shell!

  

例如:p = subprocess.Popen(' dir',shell = True)

3 个答案:

答案 0 :(得分:2)

错误消息显示,它无法找到您指定的可执行文件。这很可能是由使用反斜杠(\)引起的。反斜杠转义Python字符串中的字符。您可以将\替换为\\或替换为/。此外,您应该添加文件扩展名.cmd。试试这个:

p = subprocess.Popen(["C:/Program Files/Google/Cloud SDK/google-cloud-sdk/bin/bq.cmd"])

答案 1 :(得分:2)

您需要提供全名,包括文件扩展名,例如

from subprocess import Popen

p = Popen(r"C:\Program Files\Google\Cloud SDK\google-cloud-sdk\bin\bq.exe")

注意:最后.exe

r'' - 原始字符串文字用于避免在Windows路径中转义反斜杠。

注意:如果r"C:\Program Files\Google\Cloud SDK\google-cloud-sdk\bin位于%PATH%,那么您可以使用p = Popen("bq")。见Popen with conflicting executable/path

注意:如果实际的bq文件名以.cmd as @Antonio suggests结尾,则CreateProcess()Popen() cmd.exe使用的Windows函数除非您明确指定文件扩展名,否则将找不到它。如果你使用shell(%PATHEXT%);它使用不同的规则(例如,枚举bq.cmd as said in the link),因此即使您只提供bq,它也可能会找到.cmd(假设%PATHEXT%位于dir 1}})。

  

尝试使用下面提供的几个解决方案后,我发现当我使用“shell = True”时,大多数命令都适用于Windows shell!

dir是一个内部shell命令。除非有其他shell=True程序;如果没有cmd.exe在Windows上启动%COMSPEC%shell=True),它将无效。某些命令与shell=False一起使用并且在没有它的情况下似乎失败的原因是由于与{{1}}情况(默认值)相比,用于查找可执行文件的规则不同。这些规则列举为as said in the link

答案 2 :(得分:2)

使用以下其中一项:

from subprocess import Popen
p = Popen(["C:/Program Files/Google/Cloud SDK/google-cloud-sdk/bin/bq.cmd"])
p = Popen([r"C:\Program Files\Google\Cloud SDK\google-cloud-sdk\bin\bq.cmd"])
Google Cloud SDK for Windows中的bq可执行文件称为bq.cmd。从命令行调用它时,cmd将自动查找.cmd扩展名,而python解释器则不会。