如何检查代码运行是直接通过文件运行还是通过在python中导入其他文件来运行?

时间:2018-08-13 10:38:26

标签: python tkinter import

我正在尝试为应用程序制作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

2 个答案:

答案 0 :(得分:1)

您应该在主函数中添加逻辑,然后在文件底部添加

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

'main'是在其中执行顶级代码的作用域的名称。从标准输入,脚本或交互式提示中读取时,模块的__name__设置为'__main__'

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

答案 1 :(得分:1)

或创建一个类:

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)