12

タイトルの通りです。コンソール ウィンドウ内で実行しているか、IDLE で実行しているかによって動作が異なるスクリプトを作成したいと考えています。チェックできる IDLE で実行している場合にのみ存在するオブジェクトはありますか? 環境変数?

Windows で Python 2.6.5 と 2.7 を使用しています。

編集:

これまでに与えられた答えはうまくいきます。しかし、これを行う公式の方法、またはハックのように見えない方法を探しています。誰かが思いついたら、それを答えとして受け入れます。それ以外の場合は、数日以内に、最も早い回答を受け入れます。

4

5 に答える 5

15

私はやりたい:

import sys
print('Running IDLE' if 'idlelib.run' in sys.modules else 'Out of IDLE')
于 2011-09-18T06:40:19.350 に答える
6

Googleは2003年からこのフォーラムの投稿を見つけました。Python3.1(win32用)とそれに付属するバージョンのIDLEでは、コマンドラインにlen(sys.modules)os 47がありますが、IDLEシェルには122があります。

しかし、なぜとにかく気にする必要があるのですか?Tkinterコードは、IDLEで実行すると(後者はtkinter自体を使用するため)、多少の煩わしさがありますが、それ以外の場合は、気にする必要はないと思います。

于 2010-08-07T18:25:31.663 に答える
5

すべてのコードを 1 つの関数 (Python 3) にまとめることをお勧めします。

def RunningIntoPythonIDLE():

    import idlelib.PyShell

    def frames(frame = sys._getframe()):
        _frame = frame
        while _frame :
            yield _frame
            _frame = _frame.f_back

    return idlelib.PyShell.main.__code__ in [frame.f_code for frame in frames()]

したがって、tkinter アプリはそのチェックを行うことができます。

if not RunningIntoPythonIDLE():
    root.mainloop()
于 2011-07-07T10:41:11.850 に答える
1

私の提案は、実行中のすべてのフレームのリストを取得し、メインの Idle メソッドがそこにあるかどうかを確認することです。

def frames(frame = sys._getframe()):
    _frame = frame
    while _frame :
        yield _frame
        _frame = _frame.f_back
import idlelib.PyShell
print(idlelib.PyShell.main.func_code in [frame.f_code for frame in frames()])

フレーム関数は、宣言の瞬間に実行されるフレームを生成するため、アイドルがここにあるかどうかを確認できます。

于 2010-08-07T20:10:47.113 に答える