【问题标题】:Bigquery command line tool on WindowsWindows 上的 Bigquery 命令行工具
【发布时间】:2015-02-11 21:16:44
【问题描述】:

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

在 windows 和 python 2.7 上

导入子流程

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

Traceback(最近一次调用最后一次): 文件“”,第 1 行,在 init 中的文件“C:\Python27\lib\subprocess.py”,第 710 行 读错,写错) _execute_child 中的文件“C:\Python27\lib\subprocess.py”,第 958 行 启动信息) WindowsError: [错误2] 系统找不到指定的文件

当我使用 bq 从命令提示符正常运行时,它运行完美。 我缺少子流程和 bq 的一些东西。

谢谢

编辑: 在尝试了下面提供的几种解决方案后,我发现当我使用“shell=True”时,大多数命令都可以在 windows shell 上运行!

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

【问题讨论】:

    标签: python subprocess google-bigquery


    【解决方案1】:

    使用其中一种:

    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 解释器不会。

    【讨论】:

    • Popen() 使用 Windows API (CreateProcess()) 运行子进程。有不同规则的是cmd.exe,而不是Python解释器。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      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 结尾,那么 (as said in the link) CreateProcess() Popen() 使用的 Windows 函数将找不到它,除非您明确指定文件扩展名.如果你使用外壳(cmd.exe);它使用不同的规则(例如,枚举%PATHEXT% as said in the link),因此即使您只给出bq,它也可能找到bq.cmd(假设.cmd%PATHEXT% 中)。

      在尝试了下面提供的几种解决方案后,我发现当我使用“shell=True”时,大多数命令都可以在 Windows shell 上运行!

      dir 是一个内部 shell 命令。除非有其他的dir 程序;如果没有在 Windows 上以 cmd.exe (%COMSPEC%) 开头的 shell=True,它将无法工作。一些命令与shell=True 一起工作并且没有它似乎会失败的原因是由于用于查找可执行文件的规则与shell=False 情况(默认值)相比有所不同。这些规则枚举为in the link (follow it and read it, I'll wait. It is 4th time, the link is mentioned in the answer)

      【讨论】:

        猜你喜欢
        • 2012-02-05
        • 1970-01-01
        • 1970-01-01
        • 2016-09-10
        • 1970-01-01
        • 2018-02-27
        • 1970-01-01
        • 2016-03-24
        • 1970-01-01
        相关资源
        最近更新 更多