我正在完成一项家庭作业,我可以使用一些帮助。我的文件名是pgreper.py。
总体目标是制作一个pyp版本的grep,它运行如下:
$ cat input.txt | ./pgreper.py“the *”
我需要制作一个debuging trace callable函数,我应该调用如下:
@CodeTrace.trace()
def matchLine(self, line):
然而,Pycharm告诉我'Trace'不可调用。
我的命令行也出错:NameError,名称'self'未定义。
有人可以帮助我理清我的功能,并帮助我让他们赎罪,提前道歉这项工作仍在进行中。
ps请在下面的代码中忽略我的评论。
#!/usr/bin/python3
import sys
import re
import time
import datetime
import inspect
import getopt
class Grepper(object):
def __init__(self, pattern):
self.pattern = pattern
@CodeTrace.Trace(self, line)
def matchline(self):
regex = re.compile(self.pattern)
for line in sys.stdin:
if regex.search(line):
sys.stdout.write(line)
#if option == -d print the following:
(CodeTrace(line).Trace(line))
print(locals().keys())
print(str(self.pattern) + str(regex))
class CodeTrace(object):
def __init__(self, line):
self.line = line
def Trace(self, line):
#Creating Timestamp
ts = time.time()
ts = datetime.datetime.fromtimestamp(ts).strftime('[%Y-%m-%d %H:%M:%S:%f]')
#Calling class and method
stack = inspect.stack()
the_class = stack[1][0].f_locals["self"].__class__
the_method = stack[1][0].f_code.co_name
calling_the_class = (" {}.{}() ".format(str(the_class), the_method))
#Any parameters passed to the method
#parameters = str((Grepper.matchline(Grepper).keys()))
#return_value = sys.argv[1]
(locals().keys())
#Writing trace
sys.stderr.write(ts + calling_the_class + "\n")
"""parameters + return_value"""
def main():
pattern = str(sys.argv[1])
Grepper(pattern).matchline()
if __name__ == "__main__":
main()