加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

在Python中使用os.execvp

发布时间:2020-12-16 23:33:54 所属栏目:Python 来源:网络整理
导读:我有一个关于在 Python中使用os.execvp的问题.我有以下用于创建参数列表的代码: args = [ "java",classpath,"-Djava.library.path=" + lib_path(),ea,"-Xmx1000m","-server","code_swarm",params ] 当我使用“.join(args)输出一个字符串并将其粘贴到我的she
我有一个关于在 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”,…].

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读