Pythonスクリプトで、インタプリタがインタラクティブモードであるかどうかを確認する方法はありますか?これは、たとえば、インタラクティブPythonセッションしてモジュールをインポートすると、わずかに異なるコードが実行されます(たとえば、ロギングがオフになります)。
私は pythonが-iモードにあるかどうかを教えてください を見て、そこでコードを試しましたが、その関数はPythonは、-iフラグを使用して呼び出されましたが、インタラクティブモードの呼び出しに使用されるコマンドが引数なしのpython
の場合は呼び出されません。
私が言いたいのはこのようなものです:
if __name__=="__main__":
#do stuff
Elif __pythonIsInteractive__:
#do other stuff
else:
exit()
__main__.__file__
はインタラクティブインタプリタに存在しません:
import __main__ as main
print hasattr(main, '__file__')
これは、python -c
を介して実行されるコードにも当てはまりますが、python -m
には当てはまりません。
From [〜#〜] tfm [〜#〜] :インターフェイスオプションが指定されていない場合、-iが暗黙指定され、sys.argv [0]は空の文字列( "")であり、現在のディレクトリです。 sys.pathの先頭に追加されます。
前述のように、ユーザーがpython
を使用して引数なしでインタープリターを呼び出した場合は、if sys.argv[0] == ''
を使用してこれをテストできます。これは、python -i
で開始した場合にもtrueを返しますが、ドキュメントによると、機能的には同じです。
使用する - sys.flags
:
if sys.flags.interactive:
#interactive
else:
#not interactive
以下は、-iスイッチがある場合とない場合の両方で機能します。
#!/usr/bin/python
import sys
# Set the interpreter bool
try:
if sys.ps1: interpreter = True
except AttributeError:
interpreter = False
if sys.flags.interactive: interpreter = True
# Use the interpreter bool
if interpreter: print 'We are in the Interpreter'
else: print 'We are running from the command line'