当前位置:  开发笔记 > 编程语言 > 正文

在Python中使用os.execvp

如何解决《在Python中使用os.execvp》经验,为你挑选了1个好方法。

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

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

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

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

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()



1> CesarB..:

如果你的"classpath"变量包含例如"-classpath foo.jar",它将无法工作,因为它认为选项名称是"-classpath foo.jar".将它拆分为两个参数:[...," - classpath",classpath,...].

其他方式(复制和粘贴以及system())可以工作,因为shell会在空格处拆分命令行(除非它们被转义或引用).事实上,命令行作为一个数组传递给被调用的程序(与Windows不同),并且JVM期望找到一个只有"-classpath"的元素,后跟另一个带有类路径的元素.

您可以通过调用以下小型Python脚本而不是JVM来查看自己的差异:

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

推荐阅读
谢谢巷议
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有