我正在一个具有 Jython2.5 的系统中工作,但我需要能够调用一些 Google 的 api,所以我编写了一个离线脚本,我想从我的 Jython 环境中调用它并返回给我一些小数据。比如 JobID 或工作表 URL 或来自 Google 的东西。
我尝试了很多方法,但我总是从 Windows 收到错误消息,说它找不到指定的文件。
路径以两种方式完成。
第一种使用字符串的方法
stringPath = r"C:\GooglePipes\Scripts\filetobq.py C:\GooglePipes\Keys\DEV-BigQueryKey.json nofile C:\GooglePipes\BQ_Downtime\TESTFILE.CSV dataset1 table1"
第二种方式,作为一个序列(根据文档,使用shell=false
提供一个序列)
seqPath = [r"C:\GooglePipes\Scripts\filetobq.py",r"C:\GooglePipes\Keys\DEV-BigQueryKey.json","nofile",r"C:\GooglePipes\BQ_Downtime\TESTFILE.CSV","dataset1","table1"]
调用
data, err = Popen(seqPath, shell=True, stderr=PIPE, stdout=PIPE).communicate()
#Read values back in
print data
print err
更换seqPath
为stringPath
尝试任何一种方式。
我整个周末都在这,每次我运行它我都从 Windows
The system cannot find the path specified.
从err
印刷品。我一直无法调试比这更进一步。我不太确定发生了什么。当我将stringPath
变量直接粘贴到计算机的命令窗口中时,它会执行。
我也打电话subprocess.list2cmdline(seqPath)
来看看它在输出什么。它给我一个?在字符串前面,但我无法弄清楚这意味着什么。我可以将字符串的其余部分从问号之后开始粘贴到命令窗口中并执行。
?C:\GooglePipes\Scripts\filetobq.py C:\GooglePipes...
我在 shell 上尝试了许多不同的 true 和 false 组合,将不同的 args 传递到Popen
、双斜杠中,并且从堆栈溢出和其他帮助论坛中打开了不少于 30 个选项卡。我只是不知道此时该怎么做,任何帮助表示赞赏。
编辑
这 ?当我进行一些额外的日志记录时,刺痛开始时实际上是一个 NULL 字符。这似乎是我问题的根源。我不知道它为什么会出现,但它出现在我的复制粘贴中。我开始手动输入,我得到了它的工作。当我用我的 Jython 程序输入路径时,它又出现了。