2017-11-25 12 views
1

배치 프로세스 파일을 백그라운드에서 실행하려고하는데 배치 파일에 에코가 있으면 실행이 중지됩니다. 이 내 진짜 배치 파일이 너무 많이 실패로 테스트를 위해 사용하는 메신저 예제 배치 파일입니다Python : 하위 프로세스 실행 중 백그라운드에서 배치 파일의 팝업이 백그라운드에서 멈춤 echo

subprocess.Popen("test.bat", shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) 

:

내가 파이썬에서 사용하고 무엇

@ECHO OFF 
ECHO %date% %time%: Test 1 >> test.txt 
ECHO Test 1 
ECHO %date% %time%: Test 2 >> test.txt 
ECHO Test 2 

이것을 실행하면 text.txt 파일이 "Test 2"텍스트로 채워지지 않으므로 거의 항상 "ECHO Test 1"에서 멈 춥니 다. "ECHO Test 1"을 제거하거나 주석 처리하면 작동합니다. 이 실제 배치 파일에서는이 파일이 단순하지 않으므로 여러 파일로 시도한 후 에코도 중단됩니다.

반향 파일 이후 수동으로 배치 파일을 수동으로 실행하는 동안 작동합니다. echo를 제거하여 문제를 해결할 수 있습니다. 그러나 배치 파일을 수동으로 실행하려면 잘 작동하지 않습니다.

내가 잘못한 일을하고 있습니까? 아니면 어떻게 작동하고있는 것입니까? 내가 백그라운드에서 실행 배치 파일을 원하고 나는 그것이 다음과 같습니다 출력을 원하지 않았다으로

+0

이 배치 파일에 실제 배치 파일과 동일한 문제가 있습니까? –

+0

명령 출력이 필요합니까? 왜냐하면 잠시 후 출력을 소비해야하기 때문입니다. 그렇지 않으면 프로세스가 차단됩니다. –

+0

실제 배치 파일과 동일한 문제가 있습니다. 이 스크립트에서는 결과물이 필요 없지만 배치 파일을 수동으로 실행하는 경우 유용합니다. 그것은 멈추지 않는 프로그램을 시작하므로 그 이유는 백그라운드에서 실행해야합니다 – Meathook

답변

0

는 일 :

subprocess.Popen("test.bat", shell=True, stdout=subprocess.DEVNULL, stderr=subprocess.STDOUT) 

또는 위해를 파이썬 < 3.3

with open(os.devnull, 'w') as f: 
    subprocess.Popen("test.bat", shell=True, stdout=f, stderr=subprocess.STDOUT) 

Jean- François Fabre은 아마도 이것이 전체 버퍼 결함 일 수 있고 내가 사용한 경우 :

subprocess.call("test.bat", shell=True) 

그것은 잘 작동하지만 배치 파일에는 여전히 실행 중이었던 타임 아웃이 있으므로 백그라운드에서 실행되지 않았으므로 DEVNULL은 버퍼 대신 모든 출력을 무시하므로 작동됩니다.