IronPythonの例題のひとつとなります。
すでに存在する外部のプロセスを呼び出して処理をする、といったシーンは現在もそれなりに存在します。
特にコンソールコマンドの類はその傾向があることでしょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | #PY = loaddll( hidemarudir + @"\hmPy.dll" ); #_ = dllfuncw(#PY, "DoString", R"PY( import clr import System from System.Diagnostics import Process command = "cmd.exe" command_args = "/c dir" p = Process() #p.StartInfo.FileName = command # 一般的なプログラムならこれで良い。実行するコマンドを秀丸からもらう # 今回の例では、一般のプログラムではなく、(旧)DOS系のコンソールコマンド。「dir.exe」などというファイルがあるわけではなく… p.StartInfo.FileName = System.Environment.GetEnvironmentVariable( "ComSpec" ); p.StartInfo.CreateNoWindow = False # コンソールを開かない p.StartInfo.UseShellExecute = False # シェル機能を使用しない p.StartInfo.RedirectStandardOutput = True # 標準出力をリダイレクト p.StartInfo.RedirectStandardInput = False # 標準入力をリダイレクトはしない p.StartInfo.Arguments = command_args p.Start() output = p.StandardOutput.ReadToEnd() # 標準出力の一気な読み取り p.WaitForExit() p.Close() output.Replace( "\r\r\n" , "\n" ) # 改行コードの修正。 # 他にもIronPythonの段階で、.NETの正規表現クラス等を利用して、値をパースしていくことも容易でしょう。 # 少なくとも秀丸マクロでやるよりは何倍も簡単でエレガントな記述となるハズです。 hm.debuginfo(output) hm.Macro.Var[ "$output" ] = output hm.Macro. Eval (r """ message $output """ ); )PY" ); freedll( #PY ); |