サブプロセスモジュールを使用してPythonからコンソールアプリケーション(SeggerのJTAGアプリケーション)を制御しようとしています。アプリケーションはstdoutに対して正しく動作しますが、stdinは読み込まれていないようです。シェルを有効にすると、入力を入力してアプリケーションを制御できますが、プログラムでこれを行う必要があります。同じコードは、cmd.exeのようなものにコマンドを発行するのにうまく機能します。Windowsコンソールアプリケーションをstdinパイプで制御する
私はキーボードが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ではなく問題である場合に、子プロセスを隠したままにすることができます。 –