【问题标题】:How to detect whether a program is running on the shell or from a program (IDLE) [duplicate]如何检测程序是在shell上运行还是从程序中运行(IDLE)[重复]
【发布时间】:2021-06-16 15:08:13
【问题描述】:

我正在编写一个程序,我需要检测一个函数是在 shell 内部还是在文件内部调用的:

这可能吗?也许是idlelib 之类的?

干杯!

【问题讨论】:

  • 你在提问之前做过研究吗?
  • @AndrewPolukhin 是的,但谷歌不在我这边 :)
  • 为什么?你想做什么,这样的差异很重要?
  • @chepner 我正在使用 tkinter 制作东西,并且该函数在 shell 中运行速度慢 10 倍或更多
  • 那么你可能应该专注于函数;根本原因可能与idle 无关。

标签: python python-idle


【解决方案1】:

原始:重复问题。 if 'idlelib.run' in sys.modules: 可能是最好的答案。加and sys.stdin is not sys.__stdin__更放心。

编辑:这是这个问题的正确答案:我如何判断我的代码是在 IDLE 中运行还是直接在 Python 中运行,没有 IDLE。结束此问题的人的想法与假设的重复项回答此问题时的想法相同。

从 IDLE 编辑器运行代码基本上与在 shell 中输入的代码相同。这就是为什么在 Shell 中出现打印输出,然后是 shell 提示符的原因。因此,如果无法自己验证,我不会相信从 IDLE 编辑器运行相同的代码时运行速度会快 10 倍。

原文:由于进程间通信的开销,在 shell 中打印大量短字符串 速度较慢。在打印之前加入字符串更快,因为每个字符的开销更少。

编辑:这里我比较了在 IDLE 中运行与在没有 IDLE 的情况下在 Python 中运行。在这两种截然不同的情况下,我看到了 10 倍的打印速度差异。

原文:如果有其他问题,请提出一个新问题,我会看看它。

编辑:上面我说“从 shell 提示符运行”和“从编辑器运行”本质上是相同的。 “Shell 正常启动,没有先运行文件”和“Shell 通过首先从编辑器运行文件启动”之间略有不同。是模块ma​​in中存在属性file,必须导入。

================================ RESTART: Shell ====================
>>> import __main__
>>> hasattr(__main__, '__file__')
False
>>> 
========================= RESTART: F:\Python\a\tem-3.py ===
# File has same two lines above.
True
# But note that subsequent calls entered here now return True.
>>> hasattr(__main__, '__file__')
True
>>> 

编辑总结:在 IDLE 的 Shell 中运行的函数可以知道 Shell 上次是如何启动或重新启动的。据我所知,它无法说出它是如何输入的。在任何一种情况下,函数的编译方式都是相同的,并且具有相同的属性。因此,它只能检测由环境设置方式不同引起的环境差异似乎是合理的。我能找到的唯一环境差异是 ma​​in.file 是否以文件开头。

【讨论】:

  • 嗯......它似乎不起作用......我会尝试看看推荐的网站
  • 什么不起作用?在什么系统和版本上?我只是重试了两个条件。第二个可能是真的,即使第一个不是,所以第一个是必要的。
  • 我在shell和文件中试过了:img
猜你喜欢
  • 1970-01-01
  • 2011-03-23
  • 2021-02-26
  • 1970-01-01
  • 2010-09-26
  • 2011-03-12
  • 1970-01-01
  • 2011-02-20
  • 2015-01-30
相关资源
最近更新 更多