pymud 0.20.2a4__py3-none-any.whl → 0.20.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
pymud/logger.py CHANGED
@@ -1,162 +1,162 @@
1
- import os, re, datetime, threading, pathlib
2
- from queue import SimpleQueue, Empty
3
- from pathlib import Path
4
-
5
- class Logger:
6
- """
7
- PyMUD 的记录器类型,可用于会话中向文件记录数据。记录文件保存在当前目录下的 log 子目录中
8
-
9
- :param name: 记录器名称,各记录器名称应保持唯一。记录器名称会作为记录文件名称的主要参数
10
- :param mode: 记录模式。可选模式包括 a, w, n 三种。
11
- - a为添加模式,当新开始记录时,会添加在原有记录文件(name.log)之后。
12
- - w为覆写模式,当新开始记录时,会覆写原记录文件(name.log)。
13
- - n为新建模式,当新开始记录时,会以name和当前时间为参数新建一个文件(name.now.log)用于记录。
14
- :param encoding: 记录文件的编码格式,默认为 "utf-8"
15
- :param errors: 当编码模式失败时的处理方式,默认为 "ignore"
16
- :param raw: 记录带ANSI标记的原始内容,还是记录纯文本内容,默认为True,即记录带ANSI标记的原始内容。
17
- """
18
-
19
- # _esc_regx = re.compile(r"\x1b\[[\d;]+[abcdmz]", flags = re.IGNORECASE)
20
-
21
- def __init__(self, name, mode = 'a', encoding = "utf-8", errors = "ignore", raw = False):
22
- self._name = name
23
- self._enabled = False
24
- self._raw = raw
25
- self.mode = mode
26
- self._encoding = encoding
27
- self._errors = errors
28
- self._lock = threading.RLock()
29
- self._stream = None
30
-
31
- self._queue = SimpleQueue()
32
-
33
- @property
34
- def name(self):
35
- "记录器名称,仅在创建时设置,过程中只读"
36
- return self._name
37
-
38
- @property
39
- def enabled(self):
40
- """
41
- 使能属性。
42
- 从false切换到true时,会打开文件,创建后台线程进行记录。
43
- 从true切换到false时,会终止后台记录线程,并关闭记录文件。
44
- """
45
- return self._enabled
46
-
47
- @enabled.setter
48
- def enabled(self, enabled):
49
- if self._enabled != enabled:
50
- if enabled:
51
- mode = "a"
52
-
53
- if self._mode in ("a", "w"):
54
- filename = f"{self.name}.log"
55
- mode = self._mode
56
- elif self._mode == "n":
57
- now = datetime.datetime.now().strftime("%Y_%m_%d_%H_%M_%S")
58
- filename = f"{self.name}.{now}.log"
59
-
60
- logdir = Path.cwd().joinpath('log')
61
- if not logdir.exists() or not logdir.is_dir():
62
- logdir.mkdir()
63
-
64
- filename = logdir.joinpath(filename)
65
- #filename = os.path.abspath(filename)
66
- self._stream = open(filename, mode = mode, encoding = self._encoding, errors = self._errors)
67
- self._thread = t = threading.Thread(target=self._monitor)
68
- t.daemon = True
69
- t.start()
70
-
71
- else:
72
- self._queue.put_nowait(None)
73
- self._thread.join()
74
- self._thread = None
75
- self._closeFile()
76
-
77
- self._enabled = enabled
78
-
79
- @property
80
- def raw(self):
81
- "属性,设置和获取是否记录带有ANSI标记的原始记录"
82
- return self._raw
83
-
84
- @raw.setter
85
- def raw(self, val: bool):
86
- self._raw = val
87
-
88
- @property
89
- def mode(self):
90
- "属性,记录器模式,可为 a, w, n"
91
- return self._mode
92
-
93
- @mode.setter
94
- def mode(self, value):
95
- if value in ("a", "w", "n"):
96
- self._mode = value
97
-
98
- def _closeFile(self):
99
- """
100
- Closes the stream.
101
- """
102
- self._lock.acquire()
103
- try:
104
- if self._stream:
105
- try:
106
- self._stream.flush()
107
- finally:
108
- stream = self._stream
109
- self._stream = None
110
- stream.close()
111
- finally:
112
- self._lock.release()
113
-
114
- def log(self, msg):
115
- """
116
- 向记录器记录信息。记录的信息会通过队列发送到独立的记录线程。
117
- 当记录器未使能时,使用该函数调用也不会记录。
118
-
119
- :param msg: 要记录的信息
120
- """
121
- if self._enabled:
122
- self._queue.put_nowait(msg)
123
-
124
- def _monitor(self):
125
- """
126
- Monitor the queue for records, and ask the handler
127
- to deal with them.
128
-
129
- This method runs on a separate, internal thread.
130
- The thread will terminate if it sees a sentinel object in the queue.
131
- """
132
- newline = True
133
- while True:
134
- try:
135
- data = self._queue.get(block = True)
136
- if data:
137
- self._lock.acquire()
138
-
139
- if newline:
140
- now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
141
- header = f"{now} {self._name}: "
142
- self._stream.write(header)
143
- newline = False
144
-
145
- if data.endswith("\n"):
146
- data = data.rstrip("\n").rstrip("\r") + "\n"
147
- newline = True
148
-
149
- if not self._raw:
150
- from .session import Session
151
- data = Session.PLAIN_TEXT_REGX.sub("", data)
152
- #data = self._esc_regx.sub("", data)
153
-
154
- self._stream.write(data)
155
-
156
- self._stream.flush()
157
- self._lock.release()
158
-
159
- else:
160
- break
161
- except Empty:
162
- break
1
+ import os, re, datetime, threading, pathlib
2
+ from queue import SimpleQueue, Empty
3
+ from pathlib import Path
4
+
5
+ class Logger:
6
+ """
7
+ PyMUD 的记录器类型,可用于会话中向文件记录数据。记录文件保存在当前目录下的 log 子目录中
8
+
9
+ :param name: 记录器名称,各记录器名称应保持唯一。记录器名称会作为记录文件名称的主要参数
10
+ :param mode: 记录模式。可选模式包括 a, w, n 三种。
11
+ - a为添加模式,当新开始记录时,会添加在原有记录文件(name.log)之后。
12
+ - w为覆写模式,当新开始记录时,会覆写原记录文件(name.log)。
13
+ - n为新建模式,当新开始记录时,会以name和当前时间为参数新建一个文件(name.now.log)用于记录。
14
+ :param encoding: 记录文件的编码格式,默认为 "utf-8"
15
+ :param errors: 当编码模式失败时的处理方式,默认为 "ignore"
16
+ :param raw: 记录带ANSI标记的原始内容,还是记录纯文本内容,默认为True,即记录带ANSI标记的原始内容。
17
+ """
18
+
19
+ # _esc_regx = re.compile(r"\x1b\[[\d;]+[abcdmz]", flags = re.IGNORECASE)
20
+
21
+ def __init__(self, name, mode = 'a', encoding = "utf-8", errors = "ignore", raw = False):
22
+ self._name = name
23
+ self._enabled = False
24
+ self._raw = raw
25
+ self.mode = mode
26
+ self._encoding = encoding
27
+ self._errors = errors
28
+ self._lock = threading.RLock()
29
+ self._stream = None
30
+
31
+ self._queue = SimpleQueue()
32
+
33
+ @property
34
+ def name(self):
35
+ "记录器名称,仅在创建时设置,过程中只读"
36
+ return self._name
37
+
38
+ @property
39
+ def enabled(self):
40
+ """
41
+ 使能属性。
42
+ 从false切换到true时,会打开文件,创建后台线程进行记录。
43
+ 从true切换到false时,会终止后台记录线程,并关闭记录文件。
44
+ """
45
+ return self._enabled
46
+
47
+ @enabled.setter
48
+ def enabled(self, enabled):
49
+ if self._enabled != enabled:
50
+ if enabled:
51
+ mode = "a"
52
+
53
+ if self._mode in ("a", "w"):
54
+ filename = f"{self.name}.log"
55
+ mode = self._mode
56
+ elif self._mode == "n":
57
+ now = datetime.datetime.now().strftime("%Y_%m_%d_%H_%M_%S")
58
+ filename = f"{self.name}.{now}.log"
59
+
60
+ logdir = Path.cwd().joinpath('log')
61
+ if not logdir.exists() or not logdir.is_dir():
62
+ logdir.mkdir()
63
+
64
+ filename = logdir.joinpath(filename)
65
+ #filename = os.path.abspath(filename)
66
+ self._stream = open(filename, mode = mode, encoding = self._encoding, errors = self._errors)
67
+ self._thread = t = threading.Thread(target=self._monitor)
68
+ t.daemon = True
69
+ t.start()
70
+
71
+ else:
72
+ self._queue.put_nowait(None)
73
+ self._thread.join()
74
+ self._thread = None
75
+ self._closeFile()
76
+
77
+ self._enabled = enabled
78
+
79
+ @property
80
+ def raw(self):
81
+ "属性,设置和获取是否记录带有ANSI标记的原始记录"
82
+ return self._raw
83
+
84
+ @raw.setter
85
+ def raw(self, val: bool):
86
+ self._raw = val
87
+
88
+ @property
89
+ def mode(self):
90
+ "属性,记录器模式,可为 a, w, n"
91
+ return self._mode
92
+
93
+ @mode.setter
94
+ def mode(self, value):
95
+ if value in ("a", "w", "n"):
96
+ self._mode = value
97
+
98
+ def _closeFile(self):
99
+ """
100
+ Closes the stream.
101
+ """
102
+ self._lock.acquire()
103
+ try:
104
+ if self._stream:
105
+ try:
106
+ self._stream.flush()
107
+ finally:
108
+ stream = self._stream
109
+ self._stream = None
110
+ stream.close()
111
+ finally:
112
+ self._lock.release()
113
+
114
+ def log(self, msg):
115
+ """
116
+ 向记录器记录信息。记录的信息会通过队列发送到独立的记录线程。
117
+ 当记录器未使能时,使用该函数调用也不会记录。
118
+
119
+ :param msg: 要记录的信息
120
+ """
121
+ if self._enabled:
122
+ self._queue.put_nowait(msg)
123
+
124
+ def _monitor(self):
125
+ """
126
+ Monitor the queue for records, and ask the handler
127
+ to deal with them.
128
+
129
+ This method runs on a separate, internal thread.
130
+ The thread will terminate if it sees a sentinel object in the queue.
131
+ """
132
+ newline = True
133
+ while True:
134
+ try:
135
+ data = self._queue.get(block = True)
136
+ if data:
137
+ self._lock.acquire()
138
+
139
+ if newline:
140
+ now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
141
+ header = f"{now} {self._name}: "
142
+ self._stream.write(header)
143
+ newline = False
144
+
145
+ if data.endswith("\n"):
146
+ data = data.rstrip("\n").rstrip("\r") + "\n"
147
+ newline = True
148
+
149
+ if not self._raw:
150
+ from .session import Session
151
+ data = Session.PLAIN_TEXT_REGX.sub("", data)
152
+ #data = self._esc_regx.sub("", data)
153
+
154
+ self._stream.write(data)
155
+
156
+ self._stream.flush()
157
+ self._lock.release()
158
+
159
+ else:
160
+ break
161
+ except Empty:
162
+ break
pymud/main.py CHANGED
@@ -1,142 +1,142 @@
1
- import os, sys, json, platform, shutil, logging, argparse
2
- from pathlib import Path
3
- from .pymud import PyMudApp
4
- from .settings import Settings
5
-
6
- CFG_TEMPLATE = {
7
- "client": {
8
- "buffer_lines" : 5000, # 保留缓冲行数
9
-
10
- "interval" : 10, # 在自动执行中,两次命令输入中的间隔时间(ms)
11
- "auto_connect" : True, # 创建会话后,是否自动连接
12
- "auto_reconnect" : False, # 在会话异常断开之后,是否自动重连
13
- "var_autosave" : True, # 断开时自动保存会话变量
14
- "var_autoload" : True, # 初始化时自动加载会话变量
15
-
16
- "echo_input" : False,
17
- "beautify" : True, # 专门为解决控制台下PKUXKX字符画对不齐的问题
18
-
19
- "status_display" : 1, # 状态窗口显示情况设置,0-不显示,1-显示在下方,2-显示在右侧
20
- "status_height" : 4, # 下侧状态栏的高度
21
- "status_width" : 30, # 右侧状态栏的宽度
22
-
23
- },
24
- "sessions" : {
25
- "pkuxkx" : {
26
- "host" : "mud.pkuxkx.net",
27
- "port" : "8081",
28
- "encoding" : "utf8",
29
- "autologin" : "{0};{1}",
30
- "default_script": "examples",
31
- "chars" : {
32
- "display_title" : ["yourid", "yourpassword", ""],
33
- }
34
- }
35
- },
36
- "keys" : {
37
- "f3" : "#ig",
38
- "f4" : "#clear",
39
- "f11" : "#close",
40
- "f12" : "#exit",
41
- }
42
- }
43
-
44
- def init_pymud_env(args):
45
- print(f"欢迎使用PyMUD, 版本{Settings.__version__}. 使用PyMUD时, 建议建立一个新目录(任意位置),并将自己的脚本以及配置文件放到该目录下.")
46
- print("即将开始为首次运行初始化环境...")
47
-
48
- dir = args.dir
49
- if dir:
50
- print(f"你已经指定了创建脚本的目录为 {args.dir}")
51
- dir = Path(dir)
52
- else:
53
- dir = Path.home().joinpath('pkuxkx')
54
-
55
- system = platform.system().lower()
56
- dir_enter = input(f"检测到当前系统为 {system}, 请指定游戏脚本的目录(若目录不存在会自动创建),直接回车表示使用默认值 [{dir}]:")
57
- if dir_enter:
58
- dir = Path(dir_enter)
59
-
60
- if dir.exists() and dir.is_dir():
61
- print(f'检测到给定目录 {dir} 已存在,切换至此目录...')
62
- else:
63
- print(f'检测到给定目录 {dir} 不存在,正在创建并切换至目录...')
64
- dir.mkdir()
65
-
66
- os.chdir(dir)
67
-
68
- if os.path.exists('pymud.cfg'):
69
- print(f'检测到脚本目录下已存在pymud.cfg文件,将直接使用此文件进入PyMUD...')
70
- else:
71
- print(f'检测到脚本目录下不存在pymud.cfg文件,将使用默认内容创建该配置文件...')
72
- with open('pymud.cfg', mode = 'x') as fp:
73
- fp.writelines(json.dumps(CFG_TEMPLATE, indent = 4))
74
-
75
- if not os.path.exists('examples.py'):
76
- from pymud import pkuxkx
77
- module_dir = pkuxkx.__file__
78
- shutil.copyfile(module_dir, 'examples.py')
79
- print(f'已将样例脚本拷贝至脚本目录,并加入默认配置文件')
80
-
81
- print(f"后续可自行修改 {dir} 目录下的 pymud.cfg 文件以进行配置。")
82
- if system == "windows":
83
- print(f"后续运行PyMUD, 请在 {dir} 目录下键入命令: python -m pymud")
84
- else:
85
- print(f"后续运行PyMUD, 请在 {dir} 目录下键入命令: python3 -m pymud")
86
-
87
- input('所有内容已初始化完毕, 请按回车进入PyMUD.')
88
-
89
- startApp(args)
90
-
91
- def startApp(args):
92
- startup_path = Path(args.startup_dir).resolve()
93
- sys.path.append(f"{startup_path}")
94
- os.chdir(startup_path)
95
-
96
- if args.debug:
97
- logging.basicConfig(level = logging.NOTSET,
98
- format = '%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
99
- datefmt = '%m-%d %H:%M',
100
- filename = args.logfile,
101
- filemode = 'a' if args.filemode else 'w',
102
- encoding = "utf-8"
103
- )
104
-
105
- else:
106
- logging.basicConfig(level = logging.NOTSET,
107
- format = '%(asctime)s %(name)-12s: %(message)s',
108
- datefmt = '%m-%d %H:%M',
109
- handlers = [logging.NullHandler()],
110
- )
111
-
112
- cfg = startup_path.joinpath("pymud.cfg")
113
- cfg_data = None
114
- if os.path.exists(cfg):
115
- with open(cfg, "r", encoding="utf8", errors="ignore") as fp:
116
- cfg_data = json.load(fp)
117
-
118
- app = PyMudApp(cfg_data)
119
- app.run()
120
-
121
- def main():
122
- parser = argparse.ArgumentParser(prog = "pymud", description = "PyMUD命令行参数帮助")
123
- subparsers = parser.add_subparsers(help = 'init用于初始化运行环境')
124
-
125
- par_init = subparsers.add_parser('init', description = '初始化pymud运行环境, 包括建立脚本目录, 创建默认配置文件, 创建样例脚本等.')
126
- par_init.add_argument('-d', '--dir', dest = 'dir', metavar = 'dir', type = str, default = '', help = '指定构建脚本目录的名称, 不指定时会根据操作系统选择不同默认值')
127
- par_init.set_defaults(func = init_pymud_env)
128
-
129
- parser.add_argument('-d', '--debug', dest = 'debug', action = 'store_true', default = False, help = '指定以调试模式进入PyMUD。此时,系统log等级将设置为logging.NOTSET, 所有log数据均会被记录。默认不启用。')
130
- parser.add_argument('-l', '--logfile', dest = 'logfile', metavar = 'logfile', default = 'pymud.log', help = '指定调试模式下记录文件名,不指定时,默认为当前目录下的pymud.log')
131
- parser.add_argument('-a', '--appendmode', dest = 'filemode', action = 'store_true', default = True, help = '指定log文件的访问模式是否为append尾部添加模式,默认为True。当为False时,使用w模式,即每次运行清空之前记录')
132
- parser.add_argument('-s', '--startup_dir', dest = 'startup_dir', metavar = 'startup_dir', default = '.', help = '指定启动目录,默认为当前目录。使用该参数可以在任何目录下,通过指定脚本目录来启动')
133
-
134
- args=parser.parse_args()
135
-
136
- if hasattr(args, 'func'):
137
- args.func(args)
138
- else:
139
- startApp(args)
140
-
141
- if __name__ == "__main__":
1
+ import os, sys, json, platform, shutil, logging, argparse
2
+ from pathlib import Path
3
+ from .pymud import PyMudApp
4
+ from .settings import Settings
5
+
6
+ CFG_TEMPLATE = {
7
+ "client": {
8
+ "buffer_lines" : 5000, # 保留缓冲行数
9
+
10
+ "interval" : 10, # 在自动执行中,两次命令输入中的间隔时间(ms)
11
+ "auto_connect" : True, # 创建会话后,是否自动连接
12
+ "auto_reconnect" : False, # 在会话异常断开之后,是否自动重连
13
+ "var_autosave" : True, # 断开时自动保存会话变量
14
+ "var_autoload" : True, # 初始化时自动加载会话变量
15
+
16
+ "echo_input" : False,
17
+ "beautify" : True, # 专门为解决控制台下PKUXKX字符画对不齐的问题
18
+
19
+ "status_display" : 1, # 状态窗口显示情况设置,0-不显示,1-显示在下方,2-显示在右侧
20
+ "status_height" : 4, # 下侧状态栏的高度
21
+ "status_width" : 30, # 右侧状态栏的宽度
22
+
23
+ },
24
+ "sessions" : {
25
+ "pkuxkx" : {
26
+ "host" : "mud.pkuxkx.net",
27
+ "port" : "8081",
28
+ "encoding" : "utf8",
29
+ "autologin" : "{0};{1}",
30
+ "default_script": "examples",
31
+ "chars" : {
32
+ "display_title" : ["yourid", "yourpassword", ""],
33
+ }
34
+ }
35
+ },
36
+ "keys" : {
37
+ "f3" : "#ig",
38
+ "f4" : "#clear",
39
+ "f11" : "#close",
40
+ "f12" : "#exit",
41
+ }
42
+ }
43
+
44
+ def init_pymud_env(args):
45
+ print(f"欢迎使用PyMUD, 版本{Settings.__version__}. 使用PyMUD时, 建议建立一个新目录(任意位置),并将自己的脚本以及配置文件放到该目录下.")
46
+ print("即将开始为首次运行初始化环境...")
47
+
48
+ dir = args.dir
49
+ if dir:
50
+ print(f"你已经指定了创建脚本的目录为 {args.dir}")
51
+ dir = Path(dir)
52
+ else:
53
+ dir = Path.home().joinpath('pkuxkx')
54
+
55
+ system = platform.system().lower()
56
+ dir_enter = input(f"检测到当前系统为 {system}, 请指定游戏脚本的目录(若目录不存在会自动创建),直接回车表示使用默认值 [{dir}]:")
57
+ if dir_enter:
58
+ dir = Path(dir_enter)
59
+
60
+ if dir.exists() and dir.is_dir():
61
+ print(f'检测到给定目录 {dir} 已存在,切换至此目录...')
62
+ else:
63
+ print(f'检测到给定目录 {dir} 不存在,正在创建并切换至目录...')
64
+ dir.mkdir()
65
+
66
+ os.chdir(dir)
67
+
68
+ if os.path.exists('pymud.cfg'):
69
+ print(f'检测到脚本目录下已存在pymud.cfg文件,将直接使用此文件进入PyMUD...')
70
+ else:
71
+ print(f'检测到脚本目录下不存在pymud.cfg文件,将使用默认内容创建该配置文件...')
72
+ with open('pymud.cfg', mode = 'x') as fp:
73
+ fp.writelines(json.dumps(CFG_TEMPLATE, indent = 4))
74
+
75
+ if not os.path.exists('examples.py'):
76
+ from pymud import pkuxkx
77
+ module_dir = pkuxkx.__file__
78
+ shutil.copyfile(module_dir, 'examples.py')
79
+ print(f'已将样例脚本拷贝至脚本目录,并加入默认配置文件')
80
+
81
+ print(f"后续可自行修改 {dir} 目录下的 pymud.cfg 文件以进行配置。")
82
+ if system == "windows":
83
+ print(f"后续运行PyMUD, 请在 {dir} 目录下键入命令: python -m pymud")
84
+ else:
85
+ print(f"后续运行PyMUD, 请在 {dir} 目录下键入命令: python3 -m pymud")
86
+
87
+ input('所有内容已初始化完毕, 请按回车进入PyMUD.')
88
+
89
+ startApp(args)
90
+
91
+ def startApp(args):
92
+ startup_path = Path(args.startup_dir).resolve()
93
+ sys.path.append(f"{startup_path}")
94
+ os.chdir(startup_path)
95
+
96
+ if args.debug:
97
+ logging.basicConfig(level = logging.NOTSET,
98
+ format = '%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
99
+ datefmt = '%m-%d %H:%M',
100
+ filename = args.logfile,
101
+ filemode = 'a' if args.filemode else 'w',
102
+ encoding = "utf-8"
103
+ )
104
+
105
+ else:
106
+ logging.basicConfig(level = logging.NOTSET,
107
+ format = '%(asctime)s %(name)-12s: %(message)s',
108
+ datefmt = '%m-%d %H:%M',
109
+ handlers = [logging.NullHandler()],
110
+ )
111
+
112
+ cfg = startup_path.joinpath("pymud.cfg")
113
+ cfg_data = None
114
+ if os.path.exists(cfg):
115
+ with open(cfg, "r", encoding="utf8", errors="ignore") as fp:
116
+ cfg_data = json.load(fp)
117
+
118
+ app = PyMudApp(cfg_data)
119
+ app.run()
120
+
121
+ def main():
122
+ parser = argparse.ArgumentParser(prog = "pymud", description = "PyMUD命令行参数帮助")
123
+ subparsers = parser.add_subparsers(help = 'init用于初始化运行环境')
124
+
125
+ par_init = subparsers.add_parser('init', description = '初始化pymud运行环境, 包括建立脚本目录, 创建默认配置文件, 创建样例脚本等.')
126
+ par_init.add_argument('-d', '--dir', dest = 'dir', metavar = 'dir', type = str, default = '', help = '指定构建脚本目录的名称, 不指定时会根据操作系统选择不同默认值')
127
+ par_init.set_defaults(func = init_pymud_env)
128
+
129
+ parser.add_argument('-d', '--debug', dest = 'debug', action = 'store_true', default = False, help = '指定以调试模式进入PyMUD。此时,系统log等级将设置为logging.NOTSET, 所有log数据均会被记录。默认不启用。')
130
+ parser.add_argument('-l', '--logfile', dest = 'logfile', metavar = 'logfile', default = 'pymud.log', help = '指定调试模式下记录文件名,不指定时,默认为当前目录下的pymud.log')
131
+ parser.add_argument('-a', '--appendmode', dest = 'filemode', action = 'store_true', default = True, help = '指定log文件的访问模式是否为append尾部添加模式,默认为True。当为False时,使用w模式,即每次运行清空之前记录')
132
+ parser.add_argument('-s', '--startup_dir', dest = 'startup_dir', metavar = 'startup_dir', default = '.', help = '指定启动目录,默认为当前目录。使用该参数可以在任何目录下,通过指定脚本目录来启动')
133
+
134
+ args=parser.parse_args()
135
+
136
+ if hasattr(args, 'func'):
137
+ args.func(args)
138
+ else:
139
+ startApp(args)
140
+
141
+ if __name__ == "__main__":
142
142
  main()