技術屋にゃん兵衛のてくてくらぼ by データウィズ [DataWith]

気の向くままソフトについて書いてます。バリバリエンジニアではないのであくまでも初心者目線で。

Wolfram EngineをVisualBasicで使う(12:コマンドラインのコマンドを呼び出す)

Wolfram EngineをVisualBasicで使う(12:コマンドラインのコマンドを呼び出す)

 

今回は、VisualBasicからWolfram言語を呼び出し、そのWolfram言語からWindowsのコマンドラインのコマンドを呼び出してみます。

 

すごく無駄な動きですが、Wolfram言語からコマンドラインを呼び出す、とという動作を確認するためなので許してください。

動作としては、インターネット上のホストにコマンドラインでpingを実行して、そのホストに到達できるかどうかを処理するものです。

 

  1. GUIのデザインを次のようにします。テキストボックスにはホスト名を入れます。ボタンを押すと、コマンドラインを呼び出して、pingを実行し、その結果をLabelに表示します。

  2. ボタンに次のコードを割り当てます。

    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」が返ってくるので、これを条件分岐して、回答を返すようにしました。

  3. さて、実行してみます。「www.yahoo.co.jp」を調べます。

    値を入れて動作確認


    次のように後ろでコマンドプロンプトが動きます。

    バックグラウンドでコマンドラインが動作
  4. 結果は、OKです。

  5. 次は意図的に、届かないものを入れてみます。



    これも正解です。

 

外部コマンドを呼び出す部分だけをWolframKernel.exeでやってみた結果も書いておきます。

WolframKernel.exeで実行した結果

 

Run使うと、他のWindowsコマンドを呼び出すことができるので、OSとの間のやり取りができます。

 

VisualBasicから直接、pingしたほうが効率的ですが、Wolfram Engineを使わないと連載が続かないので、あえて無駄な実装をしました。