Windowsで非同期的にコマンドラインを実行する
なんとかできた、か?
たとえばpython openaiapi1.py --input 1.mdというコマンドラインを実行したい場合、以下のようにする
code:bat
start /b "" cmd /c python openaiapi1.py --input 1.md
解説
1 cmd /c (コマンドライン)は、cmdを新たに立ち上げて(コマンドライン)を実行し、終わったらその立ち上げたcmdを終了する
で、この「終わったら終了する」手段は、俺の知る限り、これしかないsta.icon
2 start "" (コマンドライン)は、(コマンドライン)を非同期的に実行する。つまり実行した後、その完了を待たずに制御を返してくる
非同期的に実行したいならこのstartは欠かせないsta.icon
3 startの/bオプションは、start時に開かれるコンソールウィンドウをなくす
これを全部組み合わせたのが上記になる
GPT.icon
code:gpt
以下のコマンドの解説してください。
`
start /b "" cmd /c python openaiapi1.py --input 1.md
`
このコマンドは、Microsoft WindowsのCMD(コマンドプロンプト)で使用されるものです。
コマンドの各部分を詳しく説明します。
1. start : このコマンドは新しいウィンドウを開き、指定されたプログラムやコマンドをその中で実行します。但し、この場合/bオプションが付与されているので新しいウィンドウは作成されず、現在のウィンドウでプログラムが実行されます。
2. /b : このオプションはstartコマンドと一緒に使用すると、新しいウィンドウを作成せずにプログラムを開始します。つまり、現在開いているコマンドプロンプトのウィンドウで実行します。
3. "" : ここでは起動する新しいウィンドウのタイトルを指定する場所ですが、何も指定されていないのでデフォルトのタイトルが使用されます。
4. cmd /c : cmdは新しいCMDシェルを開始します。/cオプションは、シェルを開始した後、指定したコマンドを実行し、そのコマンドが終了したらシェルを閉じます。つまり、この一連のコマンドの実行が完了したらCMDシェルは終了します。
5. python openaiapi1.py --input 1.md : pythonコマンドはPythonインタープリタを呼び出します。openaiapi1.pyは実行するPythonスクリプトの名前を指定します。--input 1.mdはそのスクリプトに渡される引数で、スクリプト内で利用されます。
したがって、全体としてこのコマンドは「現在のコマンドプロンプトウィンドウで、Pythonインタープリタを使ってopenaiapi1.pyスクリプトを--input 1.mdという引数と共に実行して、その実行が終わったら元のCMDシェルに戻る」という動作を行います。
正しくないsta.icon
その実行が終わったら元のCMDシェルに戻る
というより、これだとあたかもpythonコマンドが終わるまで戻ってこないように聞こえる
厳密には、
1 実行した後、制御はすぐ戻ってくる
2 ただし、pythonコマンドの実行後の結果(標準出力)は実行後に戻ってくる
gptが言っているのはこっちだろう