我在一个安装了Jython2.5的系统中工作,但我需要能够调用Google的一些apis,所以我编写了一个离线脚本,希望从我的Jython环境中调用该脚本并将小块数据返回给我。比如一个JobID或者一个工作表网址或者来自谷歌的其他东西。
我已经尝试了很多方法,但是我总是从Windows得到一个错误,说它找不到指定的文件。
Path有两种方式。
第一种使用字符串的方法
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
用stringPath
替换seqPath
来尝试这两种方式。
我整个周末都在做这件事,每次我运行它的时候,我都会从Windows上得到它
The system cannot find the path specified.
从err
打印。我已经不能比这更进一步的调试了。我不太确定发生了什么。当我将stringPath
变量直接粘贴到计算机的命令窗口中时,它就会执行。
我还调用了subprocess.list2cmdline(seqPath)
来查看它的输出。它给了我一个?在字符串的前面,但我还不能理解这是什么意思。我可以将字符串的其余部分从问号后面开始粘贴到命令窗口中,然后它就会执行。
?C:\GooglePipes\Scripts\filetobq.py C:\GooglePipes...
我在shell上尝试了许多不同的true和false组合,将不同的参数传递到Popen
中,双斜杠,我从堆栈溢出和其他帮助论坛中打开了不少于30个选项卡。我只是不知道在这一点上该做什么,任何帮助都是非常感谢的。
编辑
那个?在我做一些额外的日志记录时,这个字符串的开头实际上是一个空字符。这似乎是我问题的根源。我不知道为什么它会出现,但它出现在我的拷贝粘贴中。我开始手动打字,我让它工作了。当我用我的Jython程序提供路径时,它又出现了。
发布于 2019-03-25 08:42:11
最终,错误是?/NULL字符。
我回到了源值,在那里程序抓住了路径,它就在那里。在我手动重新键入后,一切都开始正常工作。
如果您复制并粘贴我在问题中放入的内容,如果您通过string->ASCII转换器运行它,您可以看到字符串中的空字符。
>C:
>NULL 67 58
真是一堆胡说八道*。
https://stackoverflow.com/questions/55328572
复制相似问题