6

「検査」フラグと「インタラクティブ」フラグの違いは何ですか? sys.flags 関数は、それらの両方を出力します。

sys.flags のドキュメントによると、どのようにして両方に「-i」フラグを付けることができますか?

それらを個別に設定するにはどうすればよいですか?「python -i」を使用すると、両方とも 1 に設定されます。

関連している:

4

2 に答える 2

9

対応するpythonrun.cによるとPy_InspectFlagPy_InteractiveFlag次のように使用されます。

int Py_InspectFlag; /* Needed to determine whether to exit at SystemError */
/* snip */
static void
handle_system_exit(void)
{
    PyObject *exception, *value, *tb;
    int exitcode = 0;

    if (Py_InspectFlag)
        /* Don't exit if -i flag was given. This flag is set to 0
         * when entering interactive mode for inspecting. */
        return;
    /* snip */
}

SystemExit「inspect」フラグが true の場合、Python は終了しません。

int Py_InteractiveFlag; /* Needed by Py_FdIsInteractive() below */
/* snip */
/*
 * The file descriptor fd is considered ``interactive'' if either
 *   a) isatty(fd) is TRUE, or
 *   b) the -i flag was given, and the filename associated with
 *      the descriptor is NULL or "<stdin>" or "???".
 */
int
Py_FdIsInteractive(FILE *fp, const char *filename)
{
    if (isatty((int)fileno(fp)))
        return 1;
    if (!Py_InteractiveFlag)
        return 0;
    return (filename == NULL) ||
           (strcmp(filename, "<stdin>") == 0) ||
           (strcmp(filename, "???") == 0);
}

「インタラクティブ」フラグが false で、現在の入力が端末に関連付けられていない場合、python はわざわざ「インタラクティブ」モードに入る必要はありません (標準出力のバッファリング解除、バージョンの印刷、プロンプトの表示など)。

-iオプションは両方のフラグをオンにします。PYTHONINSPECT環境変数が空でない場合、「inspect」フラグもオンになります ( main.cを参照)。

基本的には、PYTHONINSPECT変数を設定してモジュールを実行すると、Python は SystemExit で終了せず (スクリプトの最後など)、代わりにインタラクティブなプロンプトを表示することを意味します (モジュールの状態を調べることができます (したがって、「検査」)フラグの名前)))。

于 2009-07-17T21:28:21.637 に答える
0

man python-iフラグについて次のように述べています。

第一引数にスクリプトを渡すか、-c オプションを使用した場合は、スクリプトまたはコマンドの実行後に対話モードに入ります。$PYTHONSTARTUP ファイルを読み取りません。これは、スクリプトが例外を発生させたときに、グローバル変数またはスタック トレースを検査するのに役立ちます。

したがって、対話モードでスクリプトを検査-iできます。この両方を暗示しています。検査せずに (つまり、引数なしで を呼び出すだけで) インタラクティブにすることはできますが、その逆はできません。-i python

于 2009-07-17T20:14:52.130 に答える