午夜国产狂喷潮在线观看|国产AⅤ精品一区二区久久|中文字幕AV中文字幕|国产看片高清在线

    Python腳本后臺運行的幾種方式
    來源:易賢網(wǎng) 閱讀:6533 次 日期:2015-03-11 14:41:34
    溫馨提示:易賢網(wǎng)小編為您整理了“Python腳本后臺運行的幾種方式”,方便廣大網(wǎng)友查閱!

    這篇文章主要介紹了Python腳本后臺運行的幾種方式,linux下后臺運行、通過upstart方式實現(xiàn)、通過bash腳本實現(xiàn)、通過screen、tmux等方式實現(xiàn),需要的朋友可以參考下

    一個用python寫的監(jiān)控腳本test1.py,用while True方式一直運行,在ssh遠(yuǎn)程(使用putty終端)時通過以下命令啟動腳本:

    代碼如下:

    python test1.py &

    現(xiàn)在腳本正常運行,通過ps能看到進程號,此時直接關(guān)閉ssh終端(不是用exit命令,是直接通過putty的關(guān)閉按鈕執(zhí)行的), 再次登錄后發(fā)現(xiàn)進程已經(jīng)退出了。

    通過后臺啟動的方式該問題已經(jīng)解決,這里總結(jié)下,也方便我以后查閱。

    linux 下后臺運行

    通過fork實現(xiàn)

    linux環(huán)境下,在c中守護進程是通過fork方式實現(xiàn)的,python也可以通過該方式實現(xiàn),示例代碼如下:

    代碼如下:

    #!/usr/bin/env python

    import time,platform

    import os

    def funzioneDemo():

    # 這是具體業(yè)務(wù)函數(shù)示例

    fout = open('/tmp/demone.log', 'w')

    while True:

    fout.write(time.ctime()+'\n')

    fout.flush()

    time.sleep(2)

    fout.close()

    def createDaemon():

    # fork進程

    try:

    if os.fork() > 0: os._exit(0)

    except OSError, error:

    print 'fork #1 failed: %d (%s)' % (error.errno, error.strerror)

    os._exit(1)

    os.chdir('/')

    os.setsid()

    os.umask(0)

    try:

    pid = os.fork()

    if pid > 0:

    print 'Daemon PID %d' % pid

    os._exit(0)

    except OSError, error:

    print 'fork #2 failed: %d (%s)' % (error.errno, error.strerror)

    os._exit(1)

    # 重定向標(biāo)準(zhǔn)IO

    sys.stdout.flush()

    sys.stderr.flush()

    si = file("/dev/null", 'r')

    so = file("/dev/null", 'a+')

    se = file("/dev/null", 'a+', 0)

    os.dup2(si.fileno(), sys.stdin.fileno())

    os.dup2(so.fileno(), sys.stdout.fileno())

    os.dup2(se.fileno(), sys.stderr.fileno())

    # 在子進程中執(zhí)行代碼

    funzioneDemo() # function demo

    if __name__ == '__main__':

    if platform.system() == "Linux":

    createDaemon()

    else:

    os._exit(0)

    通過upstart方式實現(xiàn)

    可以通過upstart把應(yīng)用封裝成系統(tǒng)服務(wù),這里直接記錄下完整示例。

    1、編寫python腳本

    代碼如下:

    [root@local t27]# cat test123.py

    #!/usr/bin/env python

    import os,time

    while True :

    print time.time()

    time.sleep(1)

    2、編寫upstat配置文件

    代碼如下:

    [root@local t27]# cat /etc/init/mikeTest.conf

    description "My test"

    author ""

    start on runlevel [234]

    stop on runlevel [0156]

    chdir /test/t27

    exec /test/t27/test123.py

    respawn

    3、重新加載upstate

    代碼如下:

    initctl reload-configuration

    4、啟動服務(wù)

    代碼如下:

    [root@local t27]# start mikeTest

    mikeTest start/running, process 6635

    [root@local t27]# ps aux | grep test123.py

    root 6635 0.0 0.0 22448 3716 ? Ss 09:55 0:00 python /test/t27/test123.py

    root 6677 0.0 0.0 103212 752 pts/1 S+ 09:56 0:00 grep test123.py

    5、停止服務(wù)

    代碼如下:

    [root@local t27]# stop mikeTest

    mikeTest stop/waiting

    [root@local t27]# ps aux | grep test123.py

    root 6696 0.0 0.0 103212 752 pts/1 S+ 09:56 0:00 grep test123.py

    [root@local t27]#

    通過bash腳本實現(xiàn)

    1、python代碼

    代碼如下:

    [root@local test]# cat test123.py

    #!/usr/bin/env python

    import os,time

    while True :

    print time.time()

    time.sleep(1)

    2、編寫啟動腳本

    代碼如下:

    [root@local test]# cat start.sh

    #! /bin/sh

    python test123.py &

    3、啟動進程

    代碼如下:

    [root@local test]#./start.sh

    如果直接用&啟動進程:

    代碼如下:

    python test123.py &

    直接關(guān)閉ssh終端會導(dǎo)致進程退出。

    通過screen、tmux等方式實現(xiàn)

    如果臨時跑程序的話,可以通過screen、tmux啟動程序,這里描述下tmux啟動的方式。

    1、啟動tmux

    在終端輸入tmux即可啟動

    2、在tmux中啟動程序

    直接執(zhí)行如下命令即可(腳本參考上面的): python test123.py

    3、直接關(guān)閉ssh終端(比如putty上的關(guān)閉按鈕);

    4、重新ssh上去之后,執(zhí)行如下命令:

    代碼如下:

    tmux attach

    現(xiàn)在可以看到python程序還在正常執(zhí)行。

    windows下后臺運行

    在windows下沒有深入的研究過,我經(jīng)常用的方法是修改python腳本的擴展名為".pyw",雙擊即可后臺運行,不需要修改任何代碼。

    更多信息請查看IT技術(shù)專欄

    更多信息請查看腳本欄目
    易賢網(wǎng)手機網(wǎng)站地址:Python腳本后臺運行的幾種方式
    由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

    2025國考·省考課程試聽報名

    • 報班類型
    • 姓名
    • 手機號
    • 驗證碼
    關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
    工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號
    云南網(wǎng)警備案專用圖標(biāo)
    聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號:hfpxwx
    咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
    云南網(wǎng)警報警專用圖標(biāo)