하위 프로세스 모듈을 사용하여 Python에서 콘솔 응용 프로그램 (Segger의 JTAG 응용 프로그램)을 제어하려고합니다. 응용 프로그램이 stdout에 대해 올바르게 작동하지만 stdin이 읽지 않은 것 같습니다. 셸을 활성화하면 입력을 입력하고 응용 프로그램을 제어 할 수 있지만 프로그래밍 방식으로이 작업을 수행해야합니다. 동일한 코드가 cmd.exe와 같은 명령을 실행하는 데 적합합니다.Windows 콘솔 응용 프로그램 제어 stderin 파이프
키보드가 stdin 대신 직접 읽혀지고 있다고 생각합니다. 어떻게 응용 프로그램 입력을 보낼 수있는 아이디어?
from subprocess import Popen, PIPE, STDOUT
jtag = Popen('"C:/Program Files/SEGGER/JLinkARM_V402e/JLink.exe"', shell=True,
universal_newlines=True,
stdin=PIPE,
stdout=PIPE,
stderr=STDOUT)
jtag.stdin.write('usb\n')
jtag.stdin.flush()
print "Stdout:"
while True:
s = jtag.stdout.readline()
if not s:
break
print s,
jtag.terminate()
이 코드는 작동합니다. 유일한 문제는 사용자가 어딘가를 클릭하면 입력 포커스가 느슨해 지므로 숨김 상태로 유지하는 대신 외부 터미널을 열어야한다는 것입니다. 자식 프로세스가 숨겨진 상태로 유지하면서이 작업을 수행하는 방법에 대한 의견이 있습니까? –
EnumWindows -> PostMessage (hwnd, WM_KEYDOWN, ...)는 문제가 자식 프로세스가 키 입력에서 입력을 읽는 것이고 stdin이 아니라면 자식 프로세스를 숨겨 지도록 허용해야합니다. –