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

Executing subprocess cannot find specified file on Windows

我在一个有 Jython2.5 的系统中工作,但我需要能够调用一些 Google 的 API,所以我写了一个离线脚本,我想从我的 Jython 环境中调用它和 return 给我的小数据。像 JobID 或 sheet 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 变量直接粘贴到计算机的命令 window 中时,它会执行。

我还调用了 subprocess.list2cmdline(seqPath) 以查看其输出的内容。它给了我一个?在字符串前面,但我一直无法弄清楚那是什么意思。我可以将字符串的其余部分从问号后开始粘贴到命令 window 中并执行。

?C:\GooglePipes\Scripts\filetobq.py C:\GooglePipes...

我在 shell 上尝试了许多不同的 true 和 false 组合,将不同的 args 传递给 Popen,双斜线,并且我从堆栈溢出中打开不少于 30 个选项卡和其他帮助论坛。我只是不知道此时该做什么,感谢您的帮助。

编辑

那个?当我进行一些额外的日志记录时,字符串开头实际上是一个 NULL 字符。这似乎是我问题的根源。我不明白为什么它会出现,但它出现在我的复制粘贴中。我开始手动打字,然后开始工作。当我用我的 Jython 程序提供路径时,它又出现了。

最终错误是 ?/NULL 字符。

我回到了程序正在抓取路径的源值,它就在那里。在我手动重新输入后,一切都开始工作了。

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

>C:
>NULL 67 58 

真是一堆废话***。