[python] 파이썬 : 쉘 또는 썬에서 실행 중인지 알아 내기 (예 : 태양 그리드 엔진 대기열)



Answers

os.getppid() 를 사용 os.getppid() 프로세스의 부모 프로세스에 대한 프로세스 ID를 찾은 다음 그 프로세스 ID를 사용하여 프로세스가 실행중인 프로그램을 판별 할 수 있습니다. 좀 더 유용하게도, sys.stdout.isatty() 사용할 수 있습니다 - 제목 질문에는 답하지 않지만 설명하는 실제 문제를 더 잘 해결하는 것 같습니다 (쉘에서 실행 중이지만 출력이 다른 프로세스 또는 파일로 리다이렉션 된 경우에는 "대화 형 항목"을 방출하지 않을 수도 있습니다.

Question

파이썬 프로그램 내에서 터미널에서 시작했는지, 아니면 태양 그리드 엔진과 같은 배치 엔진에서 시작했는지 알아낼 방법이 있습니까?

아이디어는 몇몇 진도 막대 및 다른 ascii 상호 작용하는 재료, 또는 아닙니다 인쇄에 결정하기위한 것이다.

감사!

피.




다음 Python 인터프리터와 IPython에서 Linux와 Windows 모두에서 다음 작업을 수행 할 수 있습니다 (IronPython에 대해서는 말할 수는 없지만).

isInteractive = hasattr(sys, 'ps1') or hasattr(sys, 'ipcompleter')

그러나 ipython 을 사용할 때 파일이 명령 줄 인수로 지정되면 인터프리터가 대화 형이되기 전에 실행됩니다. 아래에 어떤 의미가 있는지보십시오.

C:\>cat C:\demo.py
import sys, os

# ps1=python shell; ipcompleter=ipython shell
isInteractive = hasattr(sys, 'ps1') or hasattr(sys, 'ipcompleter')
print isInteractive and "This is interactive" or "Automated"

C:\>python c:\demo.py
Automated

C:\>python
>>> execfile('C:/demo.py')
This is interactive

C:\>ipython C:\demo.py
Automated       # NOTE! Then ipython continues to start up...

IPython 0.9.1 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object'. ?object also works, ?? prints more.

In [2]: run C:/demo.py
This is interactive    # NOTE!

HTH




Links