나는 grep의 파이썬 버전을 가지고 있는데, 나는 할당을 위해 만들고있다. 파이썬 모듈이 grep과 같이 명령 줄에서 여러 패턴을 가져 오도록하고 싶습니다. 그러나 내가하는 일과 상관없이 나는 '디버그'논쟁과 계속 충돌한다.cli에서 여러 패턴 가져 오기. argparse Python3
cat input.txt | ./pgreper.py "were"
내가 싶습니다 : 순간
pgreper.py [-h] [--debug] pattern
나는 단지 하나 개의 패턴으로 검색 할 수 있습니다 :
이
는 현재 명령 (-h와) 라인에서 모습입니다 input.txt 파일을 여러 가지 패턴으로 검색 할 수 있습니다.cat input.txt | ./pgreper.py "were" "you"
그러나이 작업을 시도하면 다음과 같은 오류 :
나는 sys.argv [1]을 읽음으로써 검색 할 패턴을 생성한다는 사실을 알고 있습니다. 필자는 구현 한 선택적 인수에 영향을주지 않고 sys.argv에서 여러 패턴을 가져올 수 있도록 스크립트를 편집하는 방법은 무엇입니까?
많은 감사합니다 :)
ps 제 의견을 무시합니다. 감사합니다.
#!/usr/bin/python3
import sys
import re
import time
import datetime
import inspect
import argparse
parser = argparse.ArgumentParser(description='Python Grep.')
parser.add_argument('--debug', default='debug', action='store_true', help='Print debug messages')
parser.add_argument('pattern', type=str, help='Pattern for pgrepping')
args = parser.parse_args()
class CodeTrace(object):
def __init__(self, line, pattern):
self.line = line
self.pattern = pattern
# @staticmethod
def trace(self, line, pattern):
# Creating Timestamp
ts = time.time()
# Formatting Timestamp
ts = datetime.datetime.fromtimestamp(ts).strftime('[%Y-%m-%d %H:%M:%S:%f]')
stack = inspect.stack()
# Retrieve calling class information
the_class = stack[1][0].f_locals["self"].__class__
# Retrieve calling method information
the_method = stack[1][0].f_code.co_name
the_variables = stack[1][0].f_code.co_varnames
# Formats the contents of the debug trace into a readable format,
# Any parameters passed to the method and the return value, are included in the debug trace
debug_trace = ("{} {}.{}.{} {} {} ".format(ts, str(the_class), the_method, the_variables, pattern, line))
# Send out the debug trace as a standard error output
sys.stderr.write(debug_trace + "\n")
class Grepper(object):
def __init__(self, pattern):
self.pattern = pattern
# @CodeTrace.trace()
def matchline(self, pattern):
regex = re.compile(self.pattern)
for line in sys.stdin:
if regex.search(line):
sys.stdout.write(line)
if args.debug != 'debug':
(CodeTrace(line, pattern).trace(line, pattern))
def main():
pattern = str(sys.argv[1])
print(sys.argv)
Grepper(pattern).matchline(pattern)
if __name__ == "__main__":
main()
'main()'함수가'args'에 저장된 구문 분석 된 인수를 무시하는 이유는 무엇입니까? –
죄송합니다, 무슨 뜻인지 모르겠군요 : ( –
'argparse'가'sys.argv'를 구문 분석 한 다음 그 결과를 무시하고 직접'sys.argv [1]'을 사용하십시오. –