문제

사용에 대한 질문이 있습니다 os.execvp 파이썬에서. 인수 목록을 작성하는 데 사용되는 다음 코드가 있습니다.

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

문자열을 사용하여 출력 할 때 " ".join(args) 그리고 그것을 내 쉘 프롬프트에 붙여 넣으면 JVM은 잘 발사되며 모든 것이 작동합니다. 내가 사용하면 모든 것이 작동합니다 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.

그래서 무엇을 제공합니까? 왜 껍질에 복사/붙여 넣기 또는 사용합니까? os.system() 일하지만 그렇지 않습니다 os.execvp()?

도움이 되었습니까?

해결책

"classpath"변수에 "-classpath foo.jar"가 포함 된 경우 옵션 이름이 "-classpath foo.jar"라고 생각하기 때문에 작동하지 않습니다. [..., "-classpath", classpath, ...].

다른 방법 (복사 및 붙여 넣기 및 System ())은 쉘이 공간에서 명령 줄을 분할하기 때문에 작동합니다 (탈출하거나 인용되지 않는 한). 명령 줄은 실제로 Windows와 달리 배열로 호출 프로그램으로 전달되며 JVM은 "-classpath"만있는 요소와 클래스 경로가있는 다른 요소를 찾을 것으로 기대합니다.

JVM 대신 다음 작은 파이썬 스크립트를 호출하여 자신의 차이점을 볼 수 있습니다.

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

다른 팁

클래스 경로에서 쉘 확장에 의존하지 않도록하십시오. 예를 들어 "~/my.jar"는 OS.System Call에서 쉘에 의해 확장되지만 os.execvp 호출을 믿지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top