2014-02-25 22 views
0

我有點困惑它如何實現。許多應用程序提供了用戶在其中啓動某些操作而無需重新啓動應用程序的功能。更清楚的是「/etc/init.d/apache2 reload」將強制Apache進程重新加載其配置文件而不重新啓動。我將如何去爲我的Python應用程序實現相同的方法?如何讓進程在Python中的用戶請求中執行一些操作?

+0

這是一個廣泛的問題。在一個功能中重新加載進程中的配置。提供一種從外部控制流程行爲的機制是另一回事。你想着重於哪裏? – pajton

+0

@pajton,我在尋找更多的概念答案。 F.E.我對實現這個目標的方法之一的猜測是實際啓動新進程,從中找到原始進程,通過kill -USR1 $ PID發送信號並等待輸出。但後來我被限制的信號數量卡住了。另一方面,我不確定這是如何實現的,這就是爲什麼我要求社區瞭解他們的知識。 – user3352528

回答

0

你可以通過定義一個方法,這樣做重置在Python應用程序:

if __name__ == "__main__": 
    answer = raw_input("Do you want to restart this program ? ") 
    if answer == "yes": 
     restart_program() 

此代碼是從here採取:

import sys 
import os 
def restart_program(): 
    python = sys.executable 
    os.execl(python, python, * sys.argv) 

然後讓用戶根據要求啓動該代碼。 Apache會根據命令進行重置,因爲程序被編寫爲接受這樣的命令,因爲python是您創建程序的語言,您需要實現此功能。

如果你只想重置某些變量,那麼你可以這樣做:

def reset_var(): 
    global var1 
    global var2 
    var1 = 0 
    var2 = 0 

刷新文件:

file = open('words.txt', 'r') 

def reloadfile(): 
    file.close() 
    file = open('words.txt', 'r') 
+0

這將實際重新啓動程序。也許有一些重要的計算正在進行,或者有人通過套接字服務器連接到應用程序,當然我們不想在半空中打破所有進程。 – user3352528

+0

然後定義一個方法來做到這一點:'def reset_var():global var1;全球變量2; var1 = 0; var2 = 0' – advert2013

0

的/etc/init.d/目錄目錄包含了一系列的管理服務的腳本。您可以在此目錄中創建一個新腳本,以允許您啓動/停止/重新啓動您編寫的任何程序。啓動和停止的命令進入這個目錄,而不是進入你的程序。例如,要停止服務,這些腳本中的很多腳本都會調用'kill'或'killall'命令。

這裏有一些鏈接,描述了目錄,以及如何創建自己的腳本吧:

http://www.ghacks.net/2009/04/04/get-to-know-linux-the-etcinitd-directory/ http://www.tldp.org/HOWTO/HighQuality-Apps-HOWTO/boot.html

相關問題