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')