setidまたはnohupを使用してPython IDLEを起動するには、スリープモードが必要です。

setidまたはnohupを使用してPython IDLEを起動するには、スリープモードが必要です。

いくつかの背景情報:私は初心者のための小さな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

おすすめ記事