我有暫停用戶輸入一個Python腳本(使用raw_input
,最近我創建了這個腳本一個Django的web用戶界面。現在,當我通過Django的執行腳本是因爲它在等待輸入後臺暫停。如何檢測腳本是否從Django或命令提示符運行?
如何確定如果腳本是由Django的或終端/ CMD /等跑了?我不想保持2流的代碼,一個是網絡,另一個用於終端。
我有暫停用戶輸入一個Python腳本(使用raw_input
,最近我創建了這個腳本一個Django的web用戶界面。現在,當我通過Django的執行腳本是因爲它在等待輸入後臺暫停。如何檢測腳本是否從Django或命令提示符運行?
如何確定如果腳本是由Django的或終端/ CMD /等跑了?我不想保持2流的代碼,一個是網絡,另一個用於終端。
爲什麼不使用__main__
:https://docs.python.org/3/library/main.html
if __name__ == '__main__':
print ('running as a script')
else:
print ('running as a web app')
作品上都蟒蛇2.7和3.x
只要問!
>>> import os
>>> import sys
>>> os.isatty(sys.stdin.fileno())
True
如果屬實,則附加到控制檯。
它爲終端(mac OS)和django輸出「True」! (僅供參考:我已將腳本導入到views.py並在UBuntu上運行django)。 – user3784080
@ user3784080嗯......我認爲django會以不同的方式處理它的腳本。 – tdelaney
明確優於隱式。將您的交互功能封裝在僅在執行部分時纔會調用的功能中。從Django的部分,只用它作爲一個圖書館。進行這種檢查的大多數方法都是半神奇的,因此很脆弱。
你爲什麼不重構你的代碼?網絡服務器可以通過一些佔位符來輸入可選的輸入,告訴你所調用的任何東西,不要求進一步的輸入。腳本不應該在乎什麼叫它,就是他們用*來稱呼它*。 – jonrsharpe
如果要檢查父進程,如果它是控制檯或Web服務器? – auserdude