【问题标题】:How to check if code running is run directly via file or run via importing in some other file in python? [duplicate]如何检查运行的代码是直接通过文件运行还是通过在python中的其他文件中导入运行? [复制]
【发布时间】:2018-08-13 10:38:26
【问题描述】:

我正在尝试为我正在使用我的 CLI 执行任务并为我的 GUI 返回字符串并提供输出的应用程序制作 CLI 和 GUI。

但问题是,当我导入我的 CLI 时,它首先会像从直接 CLI 运行时那样接受输入,但我不希望它在从 GUI 运行时从 CLI 接受输入。

因此,有什么方法可以让我检查 CLI 脚本是直接运行还是从 CLI 运行,或者导入到某个文件中然后运行。

这是我做的一个例子:

cli.py

print("hello CLI run")
x=input()
def pr(x):
    return("this is what you typed = "+x)
print(pr(x))

gui.py

from tkinter import *
from cli import pr
def sb():
    c=en.get()
    zz=pr(c)
    expression.insert(0,zz)
win=Tk()
lbl=Label(win,text="Hello World")
lbl.pack()
en=Entry(win)
en.pack()
sn=Button(win,height = 2, width = 10,text="submit",command=sb)
sn.pack()
lbl=Label(win,text="Output :")
lbl.pack()
expression=Entry(win)
expression.pack()
win.mainloop()

当我运行它时,它要求我先在 CLI 中输入,然后给出 CLI 输出,然后运行 ​​GUI

【问题讨论】:

  • 如何通过 CLI 运行它?
  • 只是通常使用“python3 cli.py”调用脚本

标签: python tkinter import


【解决方案1】:

你应该将你的逻辑添加到主函数中,然后在文件底部添加

if __name__ == "__main__":
    # Do some validation
    main()

'main' 是顶级代码执行的范围的名称。当从标准输入、脚本或交互式提示中读取时,模块的 __name__ 设置为等于 '__main__'

https://docs.python.org/3/library/main.html

【讨论】:

  • 谢谢!这就是我一直在寻找的答案。
【解决方案2】:

或者创建一个类:

gui.py:

from tkinter import *
from cli import C
def sb():
    c=en.get()
    zz=C(c).pr()
    expression.insert(0,zz)
win=Tk()
lbl=Label(win,text="Hello World")
lbl.pack()
en=Entry(win)
en.pack()
sn=Button(win,height = 2, width = 10,text="submit",command=sb)
sn.pack()
lbl=Label(win,text="Output :")
lbl.pack()
expression=Entry(win)
expression.pack()
win.mainloop()

cli.py:

print("hello CLI run")
class C:
   def __init__(self,x):
      self.x=x
   def pr(self):
      return("this is what you typed = "+self.x)

【讨论】:

  • 是的,这很有帮助,而且这种方法有效,但我不想创建类,我想区分何时导入文件和何时直接运行。谢谢
  • @AvinashKarhana 好的,那么副本中有什么帮助吗?
  • 是的,解释得很好。
猜你喜欢
  • 2020-04-18
  • 2020-01-05
  • 1970-01-01
  • 2011-06-05
  • 2021-09-12
  • 2023-01-28
  • 1970-01-01
  • 2020-01-23
  • 1970-01-01
相关资源
最近更新 更多