문제

Python 스크립트가 대화식으로 실행되는지 자동으로 감지 할 수있는 방법이 있습니까? 대안 적으로, IPython이 사용되고 있는지 여부와 일반 C Python 실행 파일을 감지 할 수 있습니까?

배경 : 내 파이썬 스크립트는 일반적으로 exit ()를 호출합니다. 때때로, 나는 일반적으로 ipython에서 디버깅 및 프로파일 링을 위해 스크립트를 대화식으로 실행합니다. 대화식으로 달리면 종료 요청을 억제하고 싶습니다.

설명:

스크립트, myscript.py가 있다고 가정합니다.

#!/usr/bin/python
...do useful stuff...
exit(exit_status)

때로는 이미 시작한 Ipython 세션 내에서 스크립트를 실행하고 다음과 같은 말을하고 싶습니다.

In [nnn]: %run -p -D myscript.pstats myscript.py

스크립트가 끝나면 exit () 호출은 IPython이 매달려 나게하고 실제로 종료하고 싶은지 묻습니다. 이것은 디버깅하는 동안 약간의 성가심이지만 (치료하기에는 너무 적다) 프로파일 링 결과를 망칠 수 있습니다. 출구 프롬프트가 프로파일 결과에 포함됩니다 (점심 식사를하기 전에 프로파일 링 세션을 시작하면 분석이 더 어려워집니다). .

내가 원하는 것은 스크립트를 수정할 수 있도록하는 것입니다.

#!/usr/bin/python
...do useful stuff...
if is_python_running_interactively():
    print "The exit_status was %d" % (exit_status,)
else:
    exit(exit_status)
도움이 되었습니까?

해결책

나는 다음을 우연히 발견했고 그것은 나를 위해 트릭을하는 것 같습니다.

def in_ipython():
    try:
        __IPYTHON__
    except NameError:
        return False
    else:
        return True

다른 팁

문서는 그렇게 말합니다 sys.ps1 비 간섭 모드에는 존재하지 않습니다. 또한 사용할 수 있습니다 sys.flags (Python 2.6+) 우리가 사용했는지 감지합니다. python -i <whatever>.

이 스크립트는 대화식, 비 간결 적으로 실행되는 경우 및 사후 모드 (Python Intercerter를 사용하는 경우 대화식 모드에 기인 할 수 있습니다. python -i 암시 적으로 사용자가 "대화식"콘솔에 착륙했다고 생각합니다) :

#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys

# IPython recognition is missing; test here if __IPYTHON__ exists, etc.

if hasattr(sys, 'ps1'):
    print("Running interactively.")
else:
    print("Not running interactively...")
    if sys.flags.interactive:
        print("... but I'm in interactive postmortem mode.")

Ipython 지원은 Fooz 씨가 설명한대로 추가 할 수 있습니다.

대화식으로 호출되면 Python은 $ Pythonstartup에서 스크립트를 실행하므로 환경 변수가 전역을 설정하는 스크립트를 호출 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top