いくつかの背景情報:私は初心者のための小さなPythonプログラミングラボを作成しています。私は彼らがPythonのIDLEエディタ(として実行python -m idlelib
)を使用したいのですが、端末の使用に慣れていない可能性があるので、IDLEを実行しているnautilus(Gnomeのファイルマネージャ)で何かをクリックしたいと思います。より正確には、Python仮想環境を使用してIDLEを起動したいので、コマンドは次のようになります..venv/bin/python -m idlelib
idle
これは私が作成し、名前を付けて実行可能ファイル()でマークしたファイルですchmod u+x
。
#!/usr/bin/env bash
.venv/bin/python -m idlelib
ダブルクリックして「実行」を選択すると、IDLEが表示され、すべてが正常です。ただし、ダブルクリックするといくつかのボタンが表示されます。 1 つは「実行」、もう 1 つは「ターミナルで実行」です。私はユーザーがどのボタンをクリックしても同じ経験をさせたいと思います。
上記のスクリプトを使用して「ターミナルで実行」を選択すると、IDLEと端末の両方がポップアップされます。これは、特に端末を閉じるとIDLEが終了するため、ユーザーに混乱を招く可能性があります。コマンドの後に追加すると、&
端末は閉じますが、「親」(ターミナル)が終了したため、IDLEも閉じます。
nohup
それで、これがsetsid
必ず必要なようだと聞きましたが、何か変なことが起こりました。私が望むもの(やや)を実行するスクリプトは次のとおりです。
#!/usr/bin/env bash
setsid .venv/bin/python -m idlelib &
sleep 1
このスクリプトをクリックして「ターミナルで実行」を選択すると、端末が表示され、IDLEが表示され、次の端末は消えますが、IDLEは保持されます。
ただし、最後の点に注意してくださいsleep 1
。削除すると、端末は数秒間だけ表示され、IDLEは決して表示されません。setsid
これは両方に発生しますnohup
。
私の質問は次のとおりですこれはなぜsleep 1
必要ですか?
私の考えでは、IDLEは起動に時間がかかり、端末が完全に起動するまで「生き残る」ことはありません。ところでおかしいですね。私が始めたいプログラムsetsid
はすぐにこれを開始したプロセスとは無関係です。
答え1
試してみてください-wオプションなので、完了するまで待ってから終了コードを返します。
#!/usr/bin/env bash
setsid -w .venv/bin/python -m idlelib