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來說,有些人可能理所當然的想在前端驗證就行了,但這樣是非常錯誤的做法,前端代