我开始学习python,我制作了一个包含登录窗口的程序。一旦用户登录,我想用实际程序运行一个新脚本,但我不想将这些脚本代码放入windows中的日志中,以保持代码整洁有序。我该怎么做呢?
我的代码是通用形式:
from tkinter import *
from re import *
import tkinter.messagebox as box
window = Tk()
window.title( 'Please Login' )
frame = Frame( window )
entry = Entry( frame )
password = Entry( frame , show='*' )
lbl1 = Label( frame , text="Name: " )
lbl2 = Label( frame , text="Alpha Key: " )
pattern = \
compile( 'GENERICPASSWORD' )
def get_passwrd() :
passwrd = ( password.get() )
is_valid = pattern.match( passwrd )
if is_valid :
# This is where I would like it to run a new script with the actual program.
else :
box.showinfo( 'Access Denied' , 'Please Try Again' )
btn = Button( frame , text = 'Log In' , command=get_passwrd )
btn.grid( row=3 , columnspan=2 )
entry.grid( row=1 , column=1 )
password.grid( row=2 , column=1 )
lbl1.grid( row=1 , sticky=E )
lbl2.grid( row=2 , sticky=E )
frame.grid( row=1 , padx=20 , pady=20 )
答案 0 :(得分:4)
使用python包管理器。如果你的另一个文件是run_this.py并且有一个名为main()的main函数,你可以添加
import run_this
run_this.main()
到您的脚本。 (通常,import语句将位于文件的顶部,而对run_this.main()的调用将在登录逻辑之后。)
为了更好地理解,当你运行python脚本时,它会将当前目录添加到 python路径。这条路径是python搜索包和模块的地方。一个模块是一些代码...一个.py结尾的文件。要使我的代码片段起作用,您必须从包含run_this.py的目录运行程序 - 以便该模块位于您的路径上。
为了让您更好地整理代码,您还可以使用包含完整代码的文件夹。任何包含名为__init__.py
的文件的文件夹都可以是一个包。 Python将检查路径文件夹中包含的每个文件夹,看它是否是一个包,如果是,将使其子文件可用。
说你的结构是这样的 -
parent_folder
gui.py
sub_gui.py
logic
__init__.py
run_this.py
another_file.py
如果您从parent_folder运行应用程序,则可以使用
import logic.run_this
import logic.another_file
在gui.py中访问他们的代码。此外,从run_this.py内部,您可以使用
import gui
import logic.another_file
这是因为gui在python路径上被拾取,而another_file没有...但是包逻辑确实被拾取,并且包含another_file。
你会注意到你的python解释器在你的python目录中为你的PYTHONPATH添加了一些东西,这些文件夹就像“site-packages”一样被添加到路径中。在某处有一个文件或打包的名为tkinter,你在这个文件的开头导入:)
修改
导入该模块时,将执行模块的实际内容。定义函数和类,并执行未包含在任何内容中的代码。代码如
模块A
a = "world"
print a
模块B
import A
print "hello"
会输出“世界问候”。相反,将您的逻辑移动到类似函数的结构中 -
模块A
def main():
a = "world"
print a
模块B
import A
print "hello"
A.main()
会输出“hello world”。请注意,main()是在模块内部定义的,因此我们将其称为A.main!我们还可以从模块中导入一个标识符 -
from A import main
只会导入该函数(而不是文件中的任何其他函数或类)。然后我们可以在不参考模块的情况下执行它
main()的
虽然在这种情况下,我们必须小心不要在当前模块中使用其他名为main()的东西!您将在python项目中看到的最后一个技巧是添加
如果名称 =='main': main()的
可以让您在不运行代码的情况下导入代码,但仍然可以将该文件作为独立脚本运行。
答案 1 :(得分:0)
我认为您正在寻找子进程模块。
以下是有关它的一些信息: https://docs.python.org/2/library/subprocess.html
你可以像这样使用它:
import subprocess
subprocess.call(["command", "arguments"])
答案 2 :(得分:0)
正如你所说,你开始学习python,你应该寻找:
import os
os.system('command')
但使用子进程模块是更好的方法。