Python:如何从脚本中运行脚本?

Python:如何从脚本中运行脚本?,python,Python,我开始学习python,我制作了一个包含登录窗口的程序。一旦用户登录,我想用实际的程序运行一个新的脚本,但我不想把脚本代码放到登录窗口中,以保持代码的有序和整洁。我该怎么做呢 我的通用代码如下所示: from tkinter import * from re import * import tkinter.messagebox as box window = Tk() window.title( 'Please Login' ) frame = Frame( window ) entry =

我开始学习python,我制作了一个包含登录窗口的程序。一旦用户登录,我想用实际的程序运行一个新的脚本,但我不想把脚本代码放到登录窗口中,以保持代码的有序和整洁。我该怎么做呢

我的通用代码如下所示:

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 )

我想您正在寻找子流程模块

以下是关于它的一些信息:

您可以这样使用它:

import subprocess
subprocess.call(["command", "arguments"])

我想您正在寻找子流程模块

以下是关于它的一些信息:

您可以这样使用它:

import subprocess
subprocess.call(["command", "arguments"])

正如您所说,您已经开始学习python,您应该寻找:

import os
os.system('command')

但是使用子流程模块是更好的方法。

正如您所说,您已经开始学习python,您应该寻找:

import os
os.system('command')

但是使用子流程模块是更好的方法。

使用python包管理器。如果您的另一个文件运行了_this.py,并且有一个名为main()的主函数,您将添加

import run_this
run_this.main()
你的剧本。(通常,import语句将位于文件的顶部,而运行_this.main()的调用将位于登录逻辑之后。)

为了更好地理解,当您运行python脚本时,它会将当前目录添加到python路径。这个路径是python搜索包和模块的地方。模块是一段代码。。。以.py结尾的文件。要使我的代码段正常工作,您必须从包含run_this.py的目录运行程序,以便该模块位于您的路径上

为了使您能够更好地组织代码,您还可以使用包-充满代码的文件夹。包含名为
\uuu init\uuuu.py
的文件的任何文件夹都可以是包。Python将检查path文件夹中包含的每个文件夹,以查看它是否是一个包,如果是,将使其子文件可用

假设你的结构是这样的-

parent_folder
    gui.py
    sub_gui.py
    logic
        __init__.py
        run_this.py
        another_file.py
如果从父文件夹运行应用程序,则可以使用

import logic.run_this
import logic.another_file
import gui
import logic.another_file
在gui.py中访问它们的代码。此外,从内部运行_this.py,您可以使用

import logic.run_this
import logic.another_file
import gui
import logic.another_file
这是因为gui是在python路径上获取的,而另一个_文件不是。。。但是如果包逻辑被提取,那么它就包含了另一个_文件

您会注意到,python解释器向PYTHONPATH中添加了一些内容—在python目录中有一些文件夹,例如添加到路径中的“site packages”。其中的某个地方有一个名为tkinter的文件或打包文件,您在该文件开头导入了该文件:)

编辑

模块的实际内容在导入该模块时执行。定义函数和类,并执行任何内容中不包含的代码。代码式

模块A

a = "world"
print a
def main():
    a = "world"
    print a
模块B

import A
print "hello"
import A
print "hello"
A.main()
将输出“世界你好”。相反,将逻辑移动到类似函数的结构中-

模块A

a = "world"
print a
def main():
    a = "world"
    print a
模块B

import A
print "hello"
import A
print "hello"
A.main()
将输出“hello world”。注意main()是在模块内部定义的,因此我们将其称为.main!我们还可以从模块中导入单个标识符-

from A import main
将只导入该函数(而不导入文件中的任何其他函数或类)。然后,我们可以在不引用模块的情况下执行它

main()

  • 虽然在这种情况下,我们必须小心不要在当前模块中使用其他名为main()的东西!您将在python项目中看到的最后一个技巧是添加

    如果名称=='main': main()


这将允许您在不提前运行代码的情况下导入代码,但仍将该文件作为独立脚本运行。

使用python包管理器。如果您的另一个文件运行了_this.py,并且有一个名为main()的主函数,您将添加

import run_this
run_this.main()
你的剧本。(通常,import语句将位于文件的顶部,而运行_this.main()的调用将位于登录逻辑之后。)

为了更好地理解,当您运行python脚本时,它会将当前目录添加到python路径。这个路径是python搜索包和模块的地方。模块是一段代码。。。以.py结尾的文件。要使我的代码段正常工作,您必须从包含run_this.py的目录运行程序,以便该模块位于您的路径上

为了使您能够更好地组织代码,您还可以使用包-充满代码的文件夹。包含名为
\uuu init\uuuu.py
的文件的任何文件夹都可以是包。Python将检查path文件夹中包含的每个文件夹,以查看它是否是一个包,如果是,将使其子文件可用

假设你的结构是这样的-

parent_folder
    gui.py
    sub_gui.py
    logic
        __init__.py
        run_this.py
        another_file.py
如果从父文件夹运行应用程序,则可以使用

import logic.run_this
import logic.another_file
import gui
import logic.another_file
在gui.py中访问它们的代码。此外,从内部运行_this.py,您可以使用

import logic.run_this
import logic.another_file
import gui
import logic.another_file
这是因为gui是在python路径上获取的,而另一个_文件不是。。。但是如果包逻辑被提取,那么它就包含了另一个_文件

您会注意到,python解释器向PYTHONPATH中添加了一些内容—在python目录中有一些文件夹,例如添加到路径中的“site packages”。其中的某个地方有一个名为tkinter的文件或打包文件,您在该文件开头导入了该文件:)

编辑

模块的实际内容在导入该模块时执行。定义函数和类,并执行任何内容中不包含的代码。代码式

模块A

a = "world"
print a
def main():
    a = "world"
    print a
模块B

import A
print "hello"
import A
print "hello"
A.main()
将输出“世界你好”。相反,将逻辑移动到类似函数的结构中-

模块A

a = "world"
print a
def main():
    a = "world"
    print a
模块B

import A
print "hello"
import A
print "hello"
A.main()
将输出“hello world”。注意main()是在模块内部定义的,因此我们将其称为.main!我们还可以从模块中导入单个标识符-

from A import main
将只导入该函数(而不导入文件中的任何其他函数或类)。然后,我们可以在不引用模块的情况下执行它

main()

  • 但在这种情况下,我们必须