python程序退出方式
-
sys.exit()
執行該語句會直接退出程序,這也是經常使用的方法,也不需要考慮平臺等因素的影響,一般是退出Python程序的首選方法。
該方法中包含一個參數status,默認為0,表示正常退出,也可以為1,表示異常退出。
import sys
sys.exit()
sys.exit(0)
sys.exit(1)
os._exit()
效果也是直接退出,不會拋出異常,但是其使用會受到平臺的限制,但我們常用的Win32平臺和基于UNIX的平臺不會有所影響。os.kill()
一般用于直接Kill掉進程,但是只能在UNIX平臺上有效。Windows下Kill進程
既然在Linux下能夠進行上述操作,那么Windows下也能夠有相關的操作。
這里使用的是os.popen(), 該方法是用于直接執行系統命令,而在Windows下其實就是使用taskkill來kill掉進程,其基本形式是,
taskkill /pid 程序的PID號碼
import os
if __name__ == "__main__":
pid = 620
os.popen('taskkill.exe /pid:'+str(pid))
這里我們采取第四種方式,獲取進程的pid,然后執行cmd命令
def getChildrenPidsOfPid():
"""Returns the children pids of a pid"""
newpidcnt = 0
pid = 0
wmi = win32com.client.GetObject('winmgmts:')
for win32_process_instance in wmi.InstancesOf('win32_process'):
if win32_process_instance.Name and win32_process_instance.Name.upper() == "HuaYang.exe".upper():
pTime = win32_process_instance.Properties_('CreationDate').Value
processId = int(win32_process_instance.Properties_('ProcessId'))
if pTime > 5:
newpidcnt = newpidcnt + 1
pid = processId
if newpidcnt > 2:
raise RuntimeError("error")
print pid
return pid
def kill(pid):
try:
# command = 'taskkill /F /IM %d' %pid
# print type(command)
# os.system(command) #1111
import subprocess
subprocess.Popen("cmd.exe /k taskkill /F /T /PID %i"%pid , shell=True)
except OSError, e:
print 'no process'
執行111處時,會出現提示Decode error - output not utf-8
具體原因:
python在編譯運行源碼后,默認將輸出結果以cp936編碼,發送給Sublime Text。而Sublime Text 中python build的默認接收編碼是UTF-8。Sublime Text在接收到python輸出后,試圖以utf-8解碼cp936編碼的流。當cp936編碼的流中沒有漢字時,因為英文字符集在cp936和utf-8中的編碼兼容,所以用utf-8解碼不會出錯;當cp936編碼的流中有漢字時,因為漢字字符集在cp936與utf-8的編碼不兼容,所以用utf-8解碼就會錯誤。最終Sublime Text就會報[Decode error - output not utf-8]錯誤。
解決方法:
方法1. Python有個PythonIoEncoding環境變量,用來定義stdin/stdout/stderr的編碼。windows下,cmd中執行python -h 可以看到該環境變量的說明。所以可以在環境變量下,添加一個環境變量pythonioencoding,值為utf-8,即可解決該問題。
方法2.修改Sublime Text的python build的設置。將其編碼設置為cp936。
1.先找到Python.sublime-build文件,Preferences->Browse Packages,打開目錄
2.進入對應語言目錄,找到*.sublime-build文件,并按截圖添加語句
sublime執行cmd命令時,經常會碰到 不是內部
后來換一個IDE就可以,估計是sublime這里對cmd命令的權限有點問題。如果哪位知道怎么回事,可以聯系我怎么回事。
- 查詢windows的pid 并且殺掉進程
查看占用指定端口的程序 **
netstat –ano|findstr “指定端口號”
如:查詢占用了8080端口的進程:netstat -ano|findstr "8080"**
使用命令殺死進程1>首先找到進程號對應的進程名稱tasklist|findstr 進程號如:tasklist|findstr 3112
然后根據進程名稱殺死進程taskkill /f /t /im 進程名稱如:taskkill /f /t /im /javaw.exe
執行系統命令的幾種方式:
os.system()
import os
cmd = 'ipconfig'
os.system(cmd)class subprocess.Popen
import subprocess
subprocess.Popen(command, shell=True)
如果command不是一個可執行文件,shell=True不可省。打開網頁
import webbrowser
webbrowser.open('http://www.google.com')