gpt4 book ai didi

python - 在 Python 中使用 os.execvp

转载 作者:太空狗 更新时间:2023-10-29 22:17:30 25 4
gpt4 key购买 nike

我有一个关于在 Python 中使用 os.execvp 的问题。我有以下用于创建参数列表的代码:

args = [ "java"       , classpath       , "-Djava.library.path=" + lib_path()       , ea       , "-Xmx1000m"       , "-server"       , "code_swarm"       , params       ]

当我使用 "".join(args) 输出字符串并将其粘贴到我的 shell 提示符时,JVM 启动正常,一切正常。如果我也在我的 Python 脚本中使用 os.system("".join(args)) 一切正常。

但是下面的代码不起作用:

os.execvp("java", args)

我收到以下错误:

Unrecognized option: -classpath [and then the classpath I created, which looks okay]Could not create the Java virtual machine.

那么是什么给了?为什么复制/粘贴到 shell 或使用 os.system() 有效,但 os.execvp() 无效?

最佳答案

如果您的“classpath”变量包含例如“-classpath foo.jar”,它将不起作用,因为它认为选项名称是“-classpath foo.jar”。将它分成两个参数:[..., "-classpath", classpath, ...]。

其他方法(复制和粘贴以及 system())之所以有效,是因为 shell 在空格处拆分命令行(除非它们被转义或引用)。命令行实际上作为数组传递给被调用的程序(与 Windows 不同),并且 JVM 期望找到一个仅包含“-classpath”的元素,后跟另一个包含类路径的元素。

您可以通过调用以下小型 Python 脚本而不是 JVM 来亲眼看到其中的区别:

#!/usr/bin/python
import sys
print sys.argv

关于python - 在 Python 中使用 os.execvp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/210978/

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