我有一個在調用解釋器時打印的MOTD類型的消息。目前這是打印在sitecustomize。如果解釋器不處於交互模式,我想要禁止該消息;不幸的是,在網站自定義中, Tell if Python is in interactive mode中的所有支票都不起作用。 (sys.argv
,sys.ps1
,__main__.__file__
未填充。)是否有檢查哪些在sitecustomize中工作?在sitecustomize中檢查python交互模式
回答
也許這個想法檢查解釋交互性利用inspect
模塊,並檢查堆棧幀可能是一些使用到你:
http://mail.python.org/pipermail/pythonmac-sig/2002-February/005054.html
您也可以嘗試直接在pydoc.help()
源,尋找其上面鏈接的代碼片段受到了啓發。
剛剛意識到您可以簡單地利用包含交互式提示的文件與PYTHONSTARTUP
環境變量。只有在解釋器以交互方式運行時,纔會執行PYTHONSTARTUP
指向的文件中的命令。
http://docs.python.org/tutorial/interpreter.html#the-interactive-startup-file
如果你不希望設置的Python外的環境變量,你也可以設置變量所需的文件中sitecustomize.py
,但是當我試圖尋找到它找到加載爲了讓我回到我的答案第一部分的鏈接。
JAB讓我看代碼,我最終想出了這個:
import ctypes
import getopt
ctypes.pythonapi.Py_GetArgcArgv.restype = None
ctypes.pythonapi.Py_GetArgcArgv.argtypes = [
ctypes.POINTER(ctypes.c_int),
ctypes.POINTER(ctypes.POINTER(ctypes.c_char_p))]
count = ctypes.c_int()
args = ctypes.pointer(ctypes.c_char_p())
ctypes.pythonapi.Py_GetArgcArgv(ctypes.byref(count), ctypes.byref(args))
argc = count.value
argv = [args[i] for i in range(count.value)]
if argc > 1:
interactive = False
opts, args = getopt.getopt(argv[1:], 'i')
for o, a in opts:
if o == '-i':
interactive = True
else:
interactive = True
有點兒醜(和Py3k的c_char_p必須c_wchar_p),但做這項工作。
很高興你能找到一種能夠按照你想要的方式工作的解決方案。 – JAB
檢查sys.flags是一個更簡潔的方法。
>>> import sys
>>> sys.flags.interactive
1
請注意,IDLE的性質也是交互式的,但標誌沒有設置。我會做如下:
>>> if sys.flags.interactive or sys.modules.has_key('idlelib'):
>>> pass # do stuff specific to interactive.
這隻會檢查是否在命令行上指定了-i ......如果解釋器是「裸露」的,它仍然會將其置於交互模式下,從而失敗。 – jtniehof
- 1. 模擬Python交互模式
- 2. 在Python中:'import sitecustomize'失敗;
- 3. 交互式Python
- 4. 在mmix交互模式下檢查寄存器內容
- 5. python中的交互式pcolor
- 6. 多包在交互式Python
- 7. 交互式Python GUI
- 8. 交互式Python網絡/圖形建模
- 9. 模擬交互式Python會話
- 10. Python交互模式下的錯誤?
- 11. Python的交互模式如何工作?
- 12. SublimeREPL上的Python交互模式
- 13. matplotlib中的交互模式
- 14. 如何檢查Python腳本是否以交互方式啓動?
- 15. PyDev交互式Python Shell在Eclipse中
- 16. 在pythonbrew中使用交互式python
- 17. 檢測python腳本在ipython中以交互方式運行時
- 18. imshow在交互模式的子圖中
- 19. 如何在cygwin中啓用python交互模式?
- 20. 擴展Python交互式shell
- 21. Python - 交互式電話簿
- 22. 如何檢查交互式shell中表達式的邏輯值?
- 23. 檢查目錄模式Python
- 24. DLV交互模式(調試)
- 25. 交互模式下的PowerShell
- 26. Python中的交互式繪圖?
- 27. Python中的交互式二維繪圖
- 28. 檢查數字模式在Python
- 29. Python中的ODE模型的交互式多點繪圖
- 30. 如何更改macports中的python版本(交互模式)?
該代碼不再在pydoc(檢查日期...)和sitecustomize中的堆棧幀在交互模式和非交互模式之間沒有區別。不過值得一試。 – jtniehof
突然意識到,對於您的情況,有一個令人驚訝的簡單解決方案。再次看到我的答案。 – JAB
我想不出一個好的方法來處理這個問題,而不用踩在用戶的PYTHONSTARTUP上,但它讓我看着那個代碼......看到我的答案。 – jtniehof