Commits

Can Xue committed cdbee1a

增加 add_options() 和 deal_with_options() 以实现默认的配置操作。

Comments (0)

Files changed (1)

kahgean/daemonkit.py

 # -*- coding: utf-8 -*-
-# Copyright (C) 2012 Xue Can <xuecan@gmail.com>
+# Copyright (C) 2012 Xue Can <xuecan@gmail.com> and contributors.
 # Licensed under the MIT license: http://www.opensource.org/licenses/mit-license
 
-u"""守护程序工具包
+"""守护程序工具包
 
 这个模块提供了编写守护程序所需的工具。包括:
 
 
 
 def _write_pidfile(pidfile):
-    u"""将当前进程号写入指定的 PID 文件"""
+    """将当前进程号写入指定的 PID 文件"""
     if not pidfile: return
     with open(pidfile, 'wb') as f:
         f.write(str(os.getpid()))
 
 
 def _remove_pidfile(pidfile):
-    u"""删除 PID 文件并退出程序"""
+    """删除 PID 文件并退出程序"""
     if pidfile and os.path.exists(pidfile):
         os.remove(pidfile)
     sys.exit(0)
 
 
 def daemonize(pidfile, umask=0o000, stdout=DEVNULL, stderr=DEVNULL):
-    u"""让程序成为守护进程
+    """让程序成为守护进程
     
     首先将会检查 PID 文件判断是否有服务进程正在运行。若没有,则将当前进程
     从控制台中剥离出来,作为守护进程在后台运行。最后,将守护进程的进程号
 
 
 def change_group(groupname):
-    u"""修改用户组"""
+    """修改用户组"""
     if not grp: return
     os.setgid(grp.getgrnam(groupname).gr_gid)
 
 
 def change_user(username):
-    u"""修改用户"""
+    """修改用户"""
     if not pwd: return
     os.setuid(pwd.getpwnam(username).pw_uid)
 
 
 def change_rlimit_nofile(limit):
-    u"""修改进程同时能打开的最大文件描述符数量"""
+    """修改进程同时能打开的最大文件描述符数量"""
     if not resource: return
     resource.setrlimit(resource.RLIMIT_NOFILE, (limit, limit))
+
+
+def add_options(options):
+    """配合 options 模块使用,方便添加和本模块有关的配置参数"""
+    options.add_option('--daemon', action='store_true', help='should %(prog)s '
+                       'run as a daemon')
+    options.add_option('--pidfile', help='filename of the pid-file')
+    options.add_option('--user', help='name of the user to run %(prog)s as')
+    options.add_option('--group', help='name of the group to run %(prog)s as')
+    options.add_option('--rlimit-nofile', type=int, help='maximum number of '
+                       'open file descriptors')
+
+
+def deal_with_options(options):
+    """配合 add_options() 使用,分析参数并进行相应操作"""
+    if options.get('rlimit_nofile'):
+        change_rlimit_nofile(options.get('rlimit_nofile'))
+    if options.get('group'):
+        change_group(options.get('group'))
+    if options.get('user'):
+        change_user(options.get('user'))
+    if options.get('daemon'):
+        pidfile = options.get(pidfile)
+        daemonize(pidfile)