我有暂停用户输入一个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