使用Lua Posix execp执行Java程序

我使用lua的posix.execp()函数在子进程中执行java程序遇到了问题。我想能够创建管道并让进程彼此通信。这就是为什么我要使用luaposix的原因。由于某种原因,它将所有正斜杠解释为类路径中的句点。我不确定我是否设置正确。我想知道我在向execp()函数提供的表格中是否做错了什么。

argjava={}
argjava[0]="java"
argjava[1]="-cp"
argjava[2]="/home/joeA/tree-lstm/lib/:'
argjava[3]="/home/joeA/tree-lstm/lib/stanford-parser/stanford-parser.jar:"
argjava[4]="/home/joeA/tree-lstm/lib/stanford-parser/stanford-parser-3.5.1-models.jar"
argjava[5]="ConstituencyParser"
argjava[6]="-tokenpath"
argjava[7]="tokens.tmp"
argjava[8]="-parentpath"
argjava[9]="parents.tmp"
argjava[10]=nil

posix.execp("java",argjava)

我希望它看起来像这样:

java -cp /home/joeA/tree-lstm/lib/:/home/joeA/tree-lstm/lib/stanford-parser/stanford-parser.jar:/home/joeA/tree-lstm/lib/stanford-parser/stanford-parser-3.5.1-models.jar ConstituencyParse -tokpath tokens.tmp -parentpath parents.tmp

这是出现的错误:

Error: Could not find or load main class .home.joeA.tree-lstm.lib.stanford-parser.stanford-parser.jar:

点赞
用户258523
用户258523

argjava 中的每个值几乎肯定都会成为结果命令行中的独立参数。

因此,您不能像那样拆分 -cp 参数的部分,否则它最终会成为三个参数中的一个,而其他两个是要加载的东西(因此出现错误)。

尝试将路径和 JAR 文件放在表中的单个字符串/值中。

argjava={
    [0]="java",
    "-cp",
    "/home/joeA/tree-lstm/lib/:/home/joeA/tree-lstm/lib/stanford-parser/stanford-parser.jar:/home/joeA/tree-lstm/lib/stanford-parser/stanford-parser-3.5.1-models.jar",
    "ConstituencyParser",
    "-tokenpath",
    "tokens.tmp",
    "-parentpath",
    "parents.tmp",
}
2015-10-29 17:49:53