执行子进程无法在Windows上找到指定的文件

问题描述 投票:1回答:1

我在一个拥有Jython2.5的系统中工作,但是我需要能够调用一些Google的api,所以我编写了一个我想从Jython环境调用的离线脚本,并返回给我一小段数据。像JobID或工作表网址或来自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个选项卡。我只是不知道该做什么,任何帮助表示赞赏。

编辑

的?当我做一些额外的日志记录时,在sting开始时实际上是一个NULL字符。这似乎是我问题的根源。我无法弄清楚它出现的原因,但它出现在我的副本中。我开始手动打字,我开始工作了。当我用Jython程序提供路径时,它再次出现。

python subprocess jython-2.5
1个回答
0
投票

最终错误是?/ NULL字符。

我回到了源程序,该程序正在抓住路径并且它存在于那里。在我手动重新键入后,一切都开始工作了。

如果您复制并粘贴我在问题中添加的内容,如果您通过字符串 - > ASCII转换器运行它,则可以在字符串中看到NULL字符。

>C:
>NULL 67 58 

真是一堆废话***。

© www.soinside.com 2019 - 2024. All rights reserved.