파이썬을 사용하여 많은 .mp4 파일 모음에 비디오 처리 프로그램을 실행했습니다. 비디오 처리 프로그램 (내가 쓰지 않았고 변경할 수 없음)은 비디오의 마지막 프레임에 도달하면 종료되지 않으므로 os.system(cmd)
을 루프에서 사용하면 .mp4 파일을 모두 통과하지 못한다. 각각의 비디오가 끝난 후에 프로세싱 프로그램을 죽인 채로 거기 앉아 있었다. 설정된 시간이 지난 후 서브 프로세스가 종료되지 않습니다.
for file in os.listdir(myPath):
if file.endswith(".mp4"):
vidfile = os.path.join(myPath, file)
command = "./Tracking " + vidfile
p = subprocess.Popen(command, shell=True)
sleep(840)
p.terminate()
의 Tracking
프로그램이 아직 종료하지 않습니다, 그래서 나는 끝낼 수많은 동영상이 동시에 열립니다. 각 개별 프레임을 강제 종료하거나 프로그램의 해당 특정 인스턴스의 ID에 kill -9 id
을 사용하여 강제로 제거 할 수 있습니다. 나는 shell=True
을 사용하는 것이 좋지 않다고 읽었지 만,이 문제가 발생하는지 확신 할 수 없습니다.
특정 시간이 지난 후에 Tracking
프로그램을 죽일 수있는 방법은 무엇입니까? 저는 파이썬에 매우 익숙하며 이것을하는 방법을 모르겠습니다. sleep()
후에 os.system("kill -9 id")
과 같은 일을 고려하고 있었지만 프로그램의 ID를 얻는 방법을 알지 못합니다.
.kill()을 사용하여 행운이 있는지 확인하십시오. 또한, 어떤 시스템을 실행하고 있습니까? –
당신은 이름으로 프로그램을 죽일 수 있습니다. 당신은 pid가 필요 없습니다. –
'shell = True'는 당신의 플랫폼에 따라이 동작을 할 수 있습니다. 당신이 그것을 사용할 때, 당신은 실제 프로세스에 대한 핸들을 갖고 있지 않다. 당신은 쉘에 대한 핸들을 가지고있다. 하지만 정말로, 왜'shell = True'를 사용하고 싶습니까? 왜 그런 식으로 올바른 방법을 쓰는 것이 좋을까요? 잘못된 방식으로하는 것만 큼 쉽습니다. 어떻게되는지보십시오. – abarnert