私はCを使用するのはかなり新しいですが、基本的には、次の行を実行します:
int a = system("python -m plotter");
私が開発したpythonモジュールを起動します。ただし、コマンドの実行が完了するのを待つのではなく、残りのcプログラムを実行し続けたい(pythonアプリは無限ループにあるため、自動的に閉じません)。 C/C++を使用してこれを行う方法はありますか?
更新:解決策は:
int a = system("start python -m plotter &");
system()
は単純に引数をシェルに渡します(Unixのようなシステムでは、通常_/bin/sh
_)。
これを試して:
_int a = system("python -m plotter &");
_
もちろん、system()
によって返される値は、pythonスクリプトの終了ステータスではありません。まだ終了していないためです。
これは、Unixライクシステム(おそらくMacOSを含む)でのみ動作する可能性があります。特に、Cygwinで実行している場合を除き、MS Windowsではおそらく動作しません。
Windowsでは、system()
はおそらく_cmd.exe
_を呼び出します。これは、Unixのようなシステムで使用されるのと同じ構文のコマンドを受け入れません。しかし、Windowsのstart
コマンドが仕事をするはずです:
_int a = system("start python -m plotter");
_
Windows固有のコードを書いている限り(たぶん_$PATH
_にstart
コマンドがなければ、start
はUnixで動作しません)、おそらく StartProcess
を呼び出すことによる、下位レベルのWindows機能。それはより複雑ですが、プロセスの実行方法をより詳細に制御できる可能性があります。一方、system()
が要件を満たしている場合は、それを使用することもできます。
標準ライブラリには方法がありませんが、OSがサポートしている場合、バックグラウンドで実行する別のスレッドを分岐または作成できます。
コマンドの最後に「&」を追加すると機能すると思います。 '&'は、コマンドをバックグラウンドで実行するように指示します
int a = system("python -m plotter &");
Linuxの「システム」コマンドは、それ自体の実行が完了した場合にのみ、残りのコードを実行させます。
同時処理が必要な場合は、fork()を使用する必要があります。