[英]Python: How to run a script from within a script?
我開始學習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 )
使用python包管理器。 如果您的其他文件是run_this.py並具有一個名為main()的主函數,則您將添加
import run_this
run_this.main()
到您的腳本。 (通常,import語句將位於文件的頂部,而對run_this.main()的調用將在登錄邏輯之后。)
為了更好地理解,當您運行python腳本時,它將當前目錄添加到python path中 。 此路徑是python搜索軟件包和模塊的位置。 模塊是一些代碼...以.py結尾的文件。 為了使我的代碼片段正常工作,您必須從包含run_this.py的目錄中運行程序-以便該模塊位於您的路徑上。
為了讓您更好地組織代碼,您還可以使用packages-充滿代碼的文件夾。 任何包含名為__init__.py
的文件的文件夾都可以是一個包。 Python將檢查path文件夾中包含的每個文件夾,以查看它是否為軟件包,如果是,將使其子文件可用。
假設您的結構是這樣的-
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解釋器在PYTHONPATH中添加了一些內容-在python目錄中,有一些文件夾(例如“ 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()的東西! 您將在python項目中看到的最后一個技巧是添加
如果名稱 =='main':main()
這樣一來,您就可以導入代碼而無需提前運行它,但仍可以將該文件作為獨立腳本運行。
我認為您正在尋找子流程模塊。
這是關於它的一些信息: https : //docs.python.org/2/library/subprocess.html
您可以像這樣使用它:
import subprocess
subprocess.call(["command", "arguments"])
正如您所說的,您開始學習python時,應該尋找:
import os
os.system('command')
但是使用子過程模塊是更好的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.