2016-07-28 2 views
-1

좋아, 지금 며칠 동안 많은 사이트에서 답변을 검색했습니다. 어딘가에 대답이 있다면, 저를 지적하면 괜찮습니다. 배치 파일 "A"를 텍스트 파일 "B"를 읽고 배치 파일 "C"의 코드를 대체하고 정보를 가져 오려고합니다. 처음 실행하면이 작업이 수행 된 다음 배치 파일 "C"가 실행됩니다. 배치 파일 "C"가 실행되는 동안 배치 파일 "A"는 텍스트 파일 "B"를보고 파일의 마지막으로 수정 된 부분을 변경합니다. 변경이 감지되면 배치 파일 "C"를 중지하고 텍스트 파일 "B"를 배치 파일 "C"에 읽기/쓰기 한 다음 배치 파일 "C"를 다시 시작해야합니다.배치 파일을 죽일 필요가 있습니다

변경 사항이 감지 될 때마다 배치 파일 "A"를 실행할 때를 제외하고 모든 작업을 수행하는 코드가 있으며, "C"라는 새 배치 파일을 시작합니다. 내가 p.terminate()와 p.kill()하지만, 어느 작품을 사용하려고했습니다

import subprocess 
    p = subprocess.Popen(r'start cmd /c C:\Users\james\Documents\FollowMeMap.bat', shell=True) 

:

는 배치 파일 "C"내가 사용을 시작합니다. 모두에게 도움을 주셔서 감사합니다.

+0

파이썬 3.4로 테스트) 과정에'cmd를/C "\ 사용자 제임스 \ 문서 \ \ FollowMeMap.bat cmd를/C C 시작"을 = True'. 'shell = True'없이 단순히 배치 파일을 실행 하는게 어떨까요? 새 콘솔 창이 필요하면'p = subprocess.Popen (r'C : \ Users \ james \ Documents \ FollowMeMap.bat ', creationflags = subprocess.CREATE_NEW_CONSOLE)'을 사용하십시오. 이와 같이,'p' 프로세스는 "FollowMeMap.bat"을 실행하는 실제 cmd.exe 인스턴스이며,'p.kill()'할 수 있습니다. – eryksun

답변

0

Windows에서 나는 그것을 사용하고 정상적으로 작동합니다. win32 api를 직접 호출하여 수행 할 수도 있습니다.

os.system ("taskkill /F /PID "+str (p.pid)) 

P는 (는) 하위 프로세스 popen 개체입니다.

편집 : start 접두사로 인해 작동하지 않는 것 같습니다. 파이썬 스레드를 만들고 실제 명령에 Popen을 실행해야합니다. 다음은 작동 예제입니다.

클래스를 만들었으므로 전역 변수가 필요하지 않습니다. (나는 싫어합니다.) 한 번 시작된 start() 스레드는 Popen을 실행합니다. 실행 파일을 실행하므로 shell=True은 필요 없지만 .bat 파일의 경우 필요할 수 있습니다. p 개체를 전용 __pipe 특성에 저장하고 기다립니다.

doit 메서드는 스레드를 시작한 후 5 초 동안 기다린 다음 시도한 명령을 사용하여 파이프를 종료합니다.

당신의 시도와의 차이는이 창을 start 명령을 필요로하지 않는다는 것입니다,하지만이 과정에 대한 더 나은 제어 (start을 가지고 단지 과정을 발사하고 정지 있도록 백그라운드에서 실행 파이썬을 사용하여, 당신은 아무런 정보가 없습니다 `의 때문에`쉘 :

실행중인

import threading 
import subprocess 
import time 

class Runner(): 
    def run_command(self): 
     p = subprocess.Popen("notepad.exe") 
     self.__pipe = p 
     p.wait() 

    def doit(self): 
     t = threading.Thread(target=self.run_command) 
     t.start() 
     time.sleep(5) 
     self.__pipe.terminate() 

r = Runner() 
r.doit() 
+0

코드를 삽입했는데 아무 것도하지 않는 것 같습니다. 파이썬을 처음 접했기 때문에 배치 파일을 실행하기 전에 변경해야 할 것이 있습니까? 참고 : 내 subprocess.popen은 p = 내 파일에 – MagicUsr87

+0

내 잘못 :이'시작 '명령은 또한 악마가 편리하지만 :) –

관련 문제