나는'm 을 실행 하위와 하위 프로세스.Popen in Python. 나는'd 좋아하는지 여부를 확인 하나 이러한 프로세스가 완료되었습니다. 나는've 찾을 두 가지 방법을 확인하는 상태의 서브프로세스,하지만 모두 보군 프로세스를 완료합니다. 하나의 프로세스를 사용하여.통신()및 인쇄 returncode,으로 설명했다여기서. 다른 것은 단순히 부르는 과정이다.wait()및 검사는 그것이 0 을 반환합니다.
있는 방법을 확인하는 경우 프로세스는 여전히 실행하기를 기다리지 않고 그것을 완성하는 경우 그것은?
Ouestion:...방법을 확인하는 경우 프로세스는 여전히 진행 중입니다...
당신은 그것을 할 수 있는 예를 들어:
p = subprocess.Popen(...
"""
A None value indicates that the process hasn't terminated yet.
"""
poll = p.poll()
if poll == None:
# p.subprocess is alive
와 테스트 파이썬:3.4.2
고
myProcessIsRunning = poll() is None
에 의해 제안으로 주요 대답을 권장하는 방법과 간단한 방법을 확인하는 경우 프로세스를 실행. (그리고 그것은 작품에서 jython 뿐만)
이 없는 경우 프로세스 인스턴스에서 손을 확인합니다. 그런 다음 운영 체제를 사용 작업 목록/Ps 프로세스입니다.
윈도우에서,내 명령은 다음과 같습니다.
filterByPid = "PID eq %s" % pid
pidStr = str(pid)
commandArguments = ['cmd', '/c', "tasklist", "/FI", filterByPid, "|", "findstr", pidStr ]
이것은 본질적으로는 것과 같은 동작을 수행하는 다음과 같은 명령 라인:
cmd /c "tasklist /FI "PID eq 55588" | findstr 55588"
과 리눅스에서,나는 정확히 동일한 작업을 수행하고 사용:
pidStr = str(pid)
commandArguments = ['ps', '-p', pidStr ]
Ps 명령을 이미로 돌아 오류 코드 0/1 는지 여부에 따라 이 과정은 발견했다. 는 동안에 윈도우 필요한 문자열을 찾을 명령입니다.
이것은 동일한 방법을 논의에 followig stack overflow 실:
https://stackoverflow.com/questions/21460775/verify-if-a-process-is-running-using-its-pid-in-java
참고: 이 방법을 사용하는 경우,양 당신의 명령을 호출에 try: foundRunningProcess=는 하위 프로세스.check_output(argumentsArray,**kwargs) True 를 반환한 를 제외하고는 예외로 잘못: return False
주주의,개발하는 경우와 함께 대 코드를 사용하여 순수한 Python 및 Jython. 에서 환경,나는에서 환상 설문조사()메소드가 작동하지 않았기 때문에 과정이 나는 것을 의심 끝내야 합니다 실제로 실행됩니다. 이 프로세스를 시작했다 Wildfly. 후에는 wildfly 지,셸을 여전히 기다리는 사용자를"계속하려면 아무 키나 누르십시오. . .".
하기 위해서 마무리 이 프로세스한 다음 코드는 일:
process.stdin.write(os.linesep)
에 jython,나는 이 문제를 해결하는 코드를 다음과 같습니다:
print >>process.stdin, os.linesep
이 차이는 프로세스가 참으로 마무리합니다. 과 jython.poll()하기 시작했는 과정을 실제로 마쳤다.