1. 程式人生 > >Python指令碼後臺執行的幾種方式

Python指令碼後臺執行的幾種方式

一個用python寫的監控指令碼test1.py,用while True方式一直執行,在ssh遠端(使用putty終端)時通過以下命令啟動指令碼:

python test1.py &


現在指令碼正常執行,通過ps能看到程序號,此時直接關閉ssh終端(不是用exit命令,是直接通過putty的關閉按鈕執行的), 再次登入後發現程序已經退出了。

通過後臺啟動的方式該問題已經解決,這裡總結下,也方便我以後查閱。

windows下後臺執行

在windows下沒有深入的研究過,我經常用的方法是修改python指令碼的副檔名為”.pyw”,雙擊即可後臺執行,不需要修改任何程式碼。

linux 下後臺執行

通過fork實現
linux環境下,在c中守護程序是通過fork方式實現的,python也可以通過該方式實現,示例程式碼如下:

#!/usr/bin/env python
import time,platform
import os
def funzioneDemo():
    # 這是具體業務函式示例
    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)
    # 重定向標準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())
    # 在子程序中執行程式碼
    funzioneDemo() # function demo
if __name__ == '__main__': 
    if platform.system() == "Linux":
        createDaemon()
    else:
        os._exit(0)

通過upstart方式實現

可以通過upstart把應用封裝成系統服務,這裡直接記錄下完整示例。

1、編寫python指令碼

[[email protected] t27]# cat test123.py
#!/usr/bin/env python
import os,time
while True :
    print time.time()
    time.sleep(1)

2、編寫upstat配置檔案

[[email protected] t27]# cat /etc/init/mikeTest.conf
description "My test"
author "
[email protected]
" start on runlevel [234] stop on runlevel [0156] chdir /test/t27 exec /test/t27/test123.py respawn
  • 3、重新載入upstate
initctl reload-configuration
  • 4、啟動服務
[[email protected] t27]# start mikeTest
mikeTest start/running, process 6635
[[email protected] 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、停止服務
[[email protected] t27]# stop mikeTest
mikeTest stop/waiting
[[email protected] t27]# ps aux | grep test123.py
root      6696  0.0  0.0 103212   752 pts/1    S+   09:56   0:00 grep test123.py
[[email protected] t27]#

通過bash指令碼實現

1、python程式碼

[[email protected] test]# cat test123.py
#!/usr/bin/env python
import os,time
while True :
    print time.time()
    time.sleep(1)
  • 2、編寫啟動指令碼
[[email protected] test]# cat start.sh
#! /bin/sh
python test123.py &
  • 3、啟動程序
[[email protected] test]#./start.sh

如果直接用&啟動程序:

python test123.py &

直接關閉ssh終端會導致程序退出。

通過screen、tmux等方式實現

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

1、啟動tmux

在終端輸入tmux即可啟動

2、在tmux中啟動程式

直接執行如下命令即可(指令碼參考上面的): python test123.py

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

4、重新ssh上去之後,執行如下命令:

tmux attach
  • 現在可以看到python程式還在正常執行。

相關推薦

Python指令碼後臺執行方式

一個用python寫的監控指令碼test1.py,用while True方式一直執行,在ssh遠端(使用putty終端)時通過以下命令啟動指令碼: python test1.py & 現在指令碼正常執行,通過ps能看到程序號,此時直接關閉ssh終端(不是用exi

JAVA web呼叫執行python指令碼程式的四方式,迴避java.lang.OutOfMemoryError:PermGen space記憶體溢位問題

我在網上搜到的JAVA呼叫python程式的三種方式: 方式一:呼叫python函式。可以傳入引數,獲取返回值。  public static void PythonFunctionTest(){         

python 讀取影象的方式

1. skimage from skimage import io img=io.imread('d:/dog.jpg',as_grey=True) #顯示影象 io.imshow(img) #儲存影象 io.imsave('d:/cat.jpg',img) 2. PIL中的I

影象處理五:python讀取圖片的方式

一、讀取圖片方式          PIL、opencv、scikit-image: (1)PIL和Pillow只提供最基礎的數字影象處理,功能有限; (2)opencv實際上是一個c++庫,只是提供了python介面,更新速度非常慢

Python 連線 MySQL 的方式

儘管很多 NoSQL 資料庫近幾年大放異彩,但是像 MySQL 這樣的關係型資料庫依然是網際網路的主流資料庫之一,每個學 Python 的都有必要學好一門資料庫,不管你是做資料分析,還是網路爬蟲,Web 開發、亦或是機器學習,你都離不開要和資料庫打交道,而 MySQL 又是最

python指令碼後臺執行

問題描述: 環境: CentOS6.4 一個用python寫的監控指令碼test1.py,用while True方式一直執行,在ssh遠端(使用putty終端)時通過以下命令啟動指令碼: python test1.py & 現在指令碼正常執行,通過ps能看

Python操作excel的方式--xlrd、xlwt、openpyxl

釋出時間:2016-05-13, 17:54:19 最後更新:2016-05-13, 21:29:30 在處理excel資料時發現了xlwt的侷限性–不能寫入超過65535行、256列的資料(因為它只支援Excel 2003及之

Python連線oracle的方式

connection=cx_Oracle.connect("tp/[email protected]_test") #檢視tns alias命令 cmd>tnsping ocn_test TNS Ping Utility forLinux: Version 9.2.0.8.0-Prod

執行python指令碼後臺執行

方法一:指令碼後加& 加了&以後可以使指令碼在後臺執行,這樣的話你就可以繼續工作了。但是有一個問題就是你關閉終端連線後,指令碼會停止執行; python3  run.py >/dev/null 2>&1 & 1 方法二:使用n

Python 連線 MySQL 的方式詳解

儘管很多 NoSQL 資料庫近幾年大放異彩,但是像 MySQL 這樣的關係型資料庫依然是網際網路的主流資料庫之一,每個學 Python 的都有必要學好一門資料庫,不管你是做資料分析,還是網路爬蟲,Web 開發、亦或是機器學習,你都離不開要和資料庫打交道,而 MySQL 又是最

Java執行Python指令碼方式

由於在專案需要執行Python,找尋相關資料,總結出以下幾種方式: 直接執行Python指令碼程式碼     引用 org.python包 1 PythonInterpreter interpreter = new PythonInterpreter(); 2 interpreter.

python利用unittest進行測試用例執行方式

尋找 顯示 成員 使用方式 main down 測試的 支持 ase 利用python進行測試時,測試用例的加載方式有2種: 一種是通過unittest.main()來啟動所需測試的測試模塊; 一種是添加到testsuite集合中再加載所有的被測試對象,而test

bat批處理執行python方式 ———— 批處理, python打包成 exe檔案

第一種方式: @echo off C: cd C:\Users\ldl\Desktop start python test100.py start python 1.py start python 1.py 10 start python 1.py 100 exit 第二種方

VSCode的Python擴充套件下程式執行方式與環境變數管理

在VSCode中編寫Python程式時,由於有些地方要使用環境變數,但是發現設定的環境變數有時不起作用,花了點時間研究了一下,過程不表,直接說結論。 首先,環境變數的設定,Python擴充套件中有三種方式: 直接設定系統環境變數,或在使用命令列啟動VSCode時臨時先設定環境變數。這種方式設定的環境變

linux指令碼中父shell與子shell 執行方式

本文主要介紹以下幾個命令的區別: shell subshell source $ (commond) `commond` Linux執行Scripts有兩種方式,主要區別在於是否建立subshell 1. source filename or . filename 不建立subshell,在當前shel

Linux 程序後臺執行方式 screen

screen是Linux視窗管理器,使用者可以建立多個screen會話,每個screen會話又可以建立多個window視窗,每一個視窗就像一個可操作的真實的ssh終端一樣。 安裝 screen

Python指令碼暫停執行方法(轉載)

轉自:讓Python指令碼暫停執行的幾種方法 1.time.sleep(secs) 參考文件原文: Suspend execution for the given number of seconds. The argument may be a

python執行sql的常見方式

#!/usr/bin/env python # -*- encoding : utf-8 -*- # author : liubin # file : cx_Oracle插入修改.py # time

Python 與 C/C++ 交互的方式

pythonpython作為一門腳本語言,其好處是語法簡單,很多東西都已經封裝好了,直接拿過來用就行,所以實現同樣一個功能,用Python寫要比用C/C++代碼量會少得多。但是優點也必然也伴隨著缺點(這是肯定的,不然還要其他語言幹嘛),python最被人詬病的一個地方可能就是其運行速度了。這這是大部分腳本語言

後臺參數驗證的方式

常見 pass bre != 前端 exe result pub ram 前言   參數驗證是一個常見的問題,無論是前端還是後臺,都需對用戶輸入進行驗證,以此來保證系統數據的正確性。對於web來說,有些人可能理所當然的想在前端驗證就行了,但這樣是非常錯誤的做法,前端代