を制御するWindowsコンソールアプリのw/stdinパイプ
-
05-09-2019 - |
質問
うことにより管理コンソール-アプリケーション(JTAGアプリからのSegger)からPython用のサブプロセスモジュールです。の申請に動作しない問題を修正標準出力に出力すが、stdinがあるようには見えませんの読み出しが行われます。場合により、シェルまでのタイプを入力制御のアプリケーションですが、まだこのプログラム.同じコード動作を発行するコマンドのようなものcmd.exe.
私の推測は、キーボードが読み込まれる直接の代わりに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()
解決
としてshoosh言うように、私がしたことを検証するための応用本当はキーボード入力します。の場合はお試しいただくことが可能でWin32通信で送信するとキーボード入力経由で自動化を実現しております。
のメッセージ通ルートを使用できるの EnumWindows 機能によctypesの窓、そして使用PostMessage送のWM_KEYDOWNます。
を送信することもできますキーボード入力 pywinauto, のActiveXコントロールの AutoIt 通win32com.
使用AutoIt:
from win32com.client import Dispatch
auto = Dispatch("AutoItX3.Control")
auto.WinActivate("The window's title", "")
auto.WinWaitActive("The window's title", "", 10)
auto.Send("The input")
他のヒント
I'm guessing that the keyboard is being read directly instead of stdin
このかわいらしい強力な前提は、前のステッチ液を実際に試したほうがよいでしょうを確認することのなかのどこかにあるのですね。が異なるレベルの行っています。実現して私が考えられることはいっ
- 待機キーボードイベントからwindowsループを実行します。そのような場合にはそのシミュレーションすることができ、キーボードだけでの送信画面の右のようなメッセージ。この枯れ
WM_KEYDOWN
またはWM_CHAR
恐らくはその他の関連に変更されることもあります。 - 実際にポーリング、ハードウェア、インスタンスを使用
GetAsyncKeyState()
.これはやや低かった場合ははいいいものをシミュレートしprogramatically.
別にこれを利用することにしたのだろう画面のキーボード、もしく動作します。または、シミュレーションの仕方をいいます。
一部のツールヒントとなるような-
- スパイ++(Visual Studio)-で確認することができます。どのようなメッセージが出ウィンドウ
- strace で確認することができます。うsyscallsプロセスです。
所属していません StackOverflow