Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python用于运行Java JAR,ClassNotFoundException_Java_Python_Jar_Stanford Nlp_Classnotfoundexception - Fatal编程技术网

Python用于运行Java JAR,ClassNotFoundException

Python用于运行Java JAR,ClassNotFoundException,java,python,jar,stanford-nlp,classnotfoundexception,Java,Python,Jar,Stanford Nlp,Classnotfoundexception,我正在使用Pythons的子流程模块来运行命令 该命令用于运行java JAR文件 当我通过终端运行它时,它运行良好,产生了所需的输出 通过终端的JAVA命令: java-cp“*”-Xmx2g edu.stanford.nlp.pipeline.StanfordCoreNLP-注释器标记化、ssplit、pos、引理、ner、parse、dcoref、depparse-文件输入/input.txt 我已经编写了一个简单的Python脚本来运行相同的命令 from subprocess impo

我正在使用Pythons的
子流程
模块来运行命令

该命令用于运行java JAR文件

当我通过终端运行它时,它运行良好,产生了所需的输出

通过终端的JAVA命令:

java-cp“*”-Xmx2g edu.stanford.nlp.pipeline.StanfordCoreNLP-注释器标记化、ssplit、pos、引理、ner、parse、dcoref、depparse-文件输入/input.txt

我已经编写了一个简单的Python脚本来运行相同的命令

from subprocess import call
def main():
    call(['java', '-cp', '\"*\"','-Xmx2g','edu.stanford.nlp.pipeline.StanfordCoreNLP','-annotators','tokenize,pos,lemma,ner,parse,dcoref,depparse', '-file', 'input/input.txt'])
Terminal命令(与我运行JAVA命令的文件夹相同):

这里的输出是:

Error: Could not find or load main class     edu.stanford.nlp.pipeline.StanfordCoreNLP
当我从python运行它或从终端运行它时,我不知道什么是不一样的?
在终端环境中,pythons
call()
遗漏了什么

任何洞察力或方向都会启动我的项目

在终端中键入
“*”
时,它只是告诉Linux不要将
*
扩展到“当前文件夹的所有内容”,并且在Windows上不做任何特殊操作(双引号有助于防止空格)。在这两种情况下,
*
被传递到java命令行

但是当以
列表的形式传递到
子流程时(传递字符串时是不同的,我不建议这样做),
\“*\”
(不需要反斜杠BTW)会以
“*”
的形式传递到java,所以它与传递
*
不同

因此,您只需将该参数更改为
*
,如下所示:

call(['java', '-cp', '*','-Xmx2g', ...

如注释中所述,
“*”
作为
argv
的一部分直接传递,不作为glob进行评估。这是因为
subprocess.call()
不调用shell。相反,它直接调用
exec()
系统调用

您可以通过以下任一方法解决此问题:

  • 指定shell。它应该是
    “java”
    之前的第一个参数
  • call()
    中包含
    shell=True
    参数
  • argv
    中显式添加类路径条目

  • 对于一般情况,您可以选择,但因为这是Java,所以#3可能是您的最佳选择。Java在处理类路径通配符方面有点奇怪,它因操作系统而异,根据我的经验,如果避免在类路径中使用通配符,那么麻烦就会少一些。请参见

    我该如何处理这个问题?我应该输入实际的字符编码值还是ASCII值@用户2357112
    call(['java', '-cp', '*','-Xmx2g', ...