ZawaWorks’s diary

プログラミング技術メモ

Processing:コマンドプロンプトを開いてみた

はじめに

 今回はProcessingでコマンドプロンプトを開くことを試みました。今回見つけた方法をそれまでの失敗を含めて紹介していきたいと思います。

環境設定

  • Windows10
  • Processing 3.2.1

launch()を使ってみる

 launch()はProcessingからファイルを実行できる命令です。 たとえば

void setup(){
  launch("notepad.exe");

}

というコードを実行すればメモ帳が開かれます。これの応用でlaunch("cmd.exe")と書き直して実行しました。

しかし動かない!

 ここで躓いた僕はいろいろと原因を探してみました。

絶対パスが原因?

 このサイトを見ると、絶対パスにしたことで解決した例がありました。それを参考にlaunch("C:\\Windows\\System32\\cmd.exe")と入力してみました。

しかし動かない!

 

リファレンスを読んでみた

 ここで諦めそうになった僕ですが、リファレンスを読み返してみました。するとこんな一文が……。

This function behaves differently on each platform. On Windows, the parameters are sent to the Windows shell via "cmd /c".

 どうやらlaunch()に書いた文字列をコマンドプロンプトに送って実行してるようです。コマンドプロンプトcmd.exeを開くときstart cmd.exeと打つので試しに以下のようなコードを書きました。

void setup(){
  launch("start cmd.exe");

}

 これを実行すると……。

f:id:ZawaWorks:20171024003501p:plain

動いた!!! 

 当初の目的通り、Processingでコマンドプロンプトを開くことに成功しました!

ついでに

 これで目的は達成しましたが、ついでに開いたコマンドプロンプトが実行したpdeファイルの入ったディレクトリに行くようにする方法も見つけました。これはバッチファイルというものを使います。バッチファイルはコマンドプロンプトで実行する命令をまとめたテキストファイルです。これに指定したディレクトリをたどり着き、かつ、コマンドプロンプトを実行するという命令を書き込みます。それをlaunch()で実行します。

コード
void setup() {
  PrintWriter output = createWriter("data/test.bat");//test.batを空にして書き込みを開始!
  output.println("cd"+" "+sketchPath());
  output.println("start cmd.exe");
  output.flush();
  output.close();//書き込み終了!

  launch(dataPath("test.bat"));
}
実行の様子

f:id:ZawaWorks:20171024003051p:plain

(sketchPath()dataPath()が分からない人はこちらを参考にしてください)

最後に

 ただ開くだけだとlaunch("start cmd.exe")でいいですがバッチファイルを使った方が汎用性があるように感じました。Windowsユーザの皆さんは試してみると良いかもしれません。

参考・参照サイト