Wolfram EngineをVisualBasicで使う(12:コマンドラインのコマンドを呼び出す)
今回は、VisualBasicからWolfram言語を呼び出し、そのWolfram言語からWindowsのコマンドラインのコマンドを呼び出してみます。
すごく無駄な動きですが、Wolfram言語からコマンドラインを呼び出す、とという動作を確認するためなので許してください。
動作としては、インターネット上のホストにコマンドラインでpingを実行して、そのホストに到達できるかどうかを処理するものです。
- GUIのデザインを次のようにします。テキストボックスにはホスト名を入れます。ボタンを押すと、コマンドラインを呼び出して、pingを実行し、その結果をLabelに表示します。
-
ボタンに次のコードを割り当てます。
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim ml As IKernelLink = MathLinkFactory.CreateKernelLink("-linkmode launch -linkname 'C:\Program Files\Wolfram Research\Wolfram Engine\13.3\WolframKernel.exe'")
ml.WaitAndDiscardAnswer()
Dim cmd_txt As String = "cmd /c ping " + TextBox1.Text
Dim result As String = ml.EvaluateToOutputForm("Run[""" + cmd_txt + """]", 0)
If result = 0 Then
Label2.Text = "ホストに届きました。."
Else
Label2.Text = "ホストに届きませんでした。"
End If
End Sub
Wolfram言語のRunは外部のプログラムを呼び出すものです。今回はWindowsのコマンドプロンプトを呼ぶので「cmd」を指定します。
コマンドプロンプトで実行するのは、
cmd /c ping ホスト名
です。
pingコマンドは、正しく届けば「0」が返ってくるので、これを条件分岐して、回答を返すようにしました。
- さて、実行してみます。「www.yahoo.co.jp」を調べます。
次のように後ろでコマンドプロンプトが動きます。 - 結果は、OKです。
- 次は意図的に、届かないものを入れてみます。
これも正解です。
外部コマンドを呼び出す部分だけをWolframKernel.exeでやってみた結果も書いておきます。
Run使うと、他のWindowsコマンドを呼び出すことができるので、OSとの間のやり取りができます。
VisualBasicから直接、pingしたほうが効率的ですが、Wolfram Engineを使わないと連載が続かないので、あえて無駄な実装をしました。