gpt4 book ai didi

python - 为什么Python命令 "subprocess.Popen"找不到要运行的jar文件?

转载 作者:太空宇宙 更新时间:2023-11-04 00:28:51 25 4
gpt4 key购买 nike

我正在尝试运行此存储库中的代码:https://github.com/tylin/coco-caption , 具体来自 https://github.com/tylin/coco-caption/blob/master/pycocoevalcap/tokenizer/ptbtokenizer.py ,第 51-52 行:

p_tokenizer = subprocess.Popen(cmd, cwd=path_to_jar_dirname, \
stdout=subprocess.PIPE)

我运行这个的错误是

OSError: [Errno 2] No such file or directory

我不明白为什么找不到文件。

我要运行的 jar 是:

stanford-corenlp-3.4.1.jar

进入https://github.com/tylin/coco-caption/tree/master/pycocoevalcap/tokenizer可以看到目录结构.为了更具体地了解我运行代码行时的实际参数:

cmd= ['java', '-cp', 'stanford-corenlp-3.4.1.jar', 'edu.stanford.nlp.process.PTBTokenizer', '-preserveLines', '-lowerCase', 'tmpWS5p0Z'],

path_to_dirname =abs_path_to_folder/tokenizer

我能看到需要运行的jar,而且看起来就在正确的地方,为什么python找不到呢。 (注意:我使用的是 python2.7。)临时文件“tmpWS5p0Z”就在它应该在的地方。

编辑:我正在使用 Ubuntu

最佳答案

尝试绝对路径(意思是从根/开始的路径)

https://en.wikipedia.org/wiki/Path_(computing)#Absolute_and_relative_paths

对于 python 中的相对路径,请参见即 Relative paths in Python , How to refer to relative paths of resources when working with a code repository in Python

更新:

作为测试,尝试使用 shell=True 选项的 subprocess.Popen() 并为任何涉及的文件提供绝对路径,包括 tmpWS5p0Z

在此 subprocess.Popen() 调用中涉及两个路径:

1) python 路径,python 必须找到 java 可执行文件和 stanford-corenlp-3.4.1.jar 这本质上是一个 java 程序,有自己的路径

2)stanford-corenlp-3.4.1.jar的java路径

因为这太复杂了,试试

p_tokenizer = subprocess.Popen(['/absolute_path_to/java -cp/absolute_path_to/stanford-corenlp-3.4.1.jar/absolute_path_to/edu.stanford.nlp.process.PTBTokenizer -preserveLines -lowerCase/absolute_path_to/tmpWS5p0Z' ], shell=True)

Python specify popen working directory via argument

Python subprocess.Popen() error (No such file or directory)

关于python - 为什么Python命令 "subprocess.Popen"找不到要运行的jar文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46533717/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com