【问题标题】:How to detect if script ran from Django or command prompt?如何检测脚本是否从 Django 或命令提示符运行?
【发布时间】:2017-09-28 01:46:09
【问题描述】:

我有一个暂停用户输入的 Python 脚本(使用raw_input,最近我为这个脚本创建了一个 Django Web UI。现在当我通过 Django 执行脚本时会暂停,因为它正在等待后端的输入。

如何确定脚本是从 Django 还是终端/cmd/etc 运行的?我不想维护 2 个代码流,一个用于 Web,另一个用于终端。

【问题讨论】:

  • 你为什么不稍微重构一下你的代码呢?网络服务器可以为可选输入传递一些占位符,告诉您调用的任何内容不要要求进一步的输入。脚本不必关心它叫什么,只关心他们用 with 叫什么。
  • 如何检查父进程,是控制台还是Web服务器?

标签: python django


【解决方案1】:

为什么不使用__main__https://docs.python.org/3/library/main.html

if __name__ == '__main__':
    print ('running as a script')
else:
    print ('running as a web app')

适用于 python 2.7 和 3.x

【讨论】:

    【解决方案2】:

    问吧!

    >>> import os
    >>> import sys
    >>> os.isatty(sys.stdin.fileno())
    True
    

    如果为真,您将连接到控制台。

    【讨论】:

    • 它为终端(mac OS)和 django 打印“真”! (仅供参考:我已将脚本导入 views.py 并在 UBuntu 上运行 django)。
    • @user3784080 嗯...我以为 django 会以不同的方式处理它的脚本。
    【解决方案3】:

    显式优于隐式。将您的交互性包装在一个函数中,该函数仅在 __name__ == "__main__" 部分被执行时才被调用。从 django 部分,只需将其用作库。大多数进行此类检查的方法都是半魔法的,因此很容易出错。

    【讨论】:

      猜你喜欢
      • 2017-03-10
      • 1970-01-01
      • 2015-05-20
      • 2013-08-29
      • 1970-01-01
      • 2016-09-20
      • 2013-06-12
      • 1970-01-01
      • 2018-05-10
      相关资源
      最近更新 更多