2016-12-18 3 views
1

IP 주소의 역방향 조회를 확인한 다음 그 결과를 txt 파일에 쓰려고합니다. grep을 사용하여 결과를 어떻게 파일에 쓸 수 있습니까?Grep을 사용하여 파일로 인쇄

내 스크립트

:

import sys, os, re, shlex, urllib, subprocess 

cmd = 'dig -x %s @192.1.1.1' % sys.argv[1] 

proc = subprocess.Popen(shlex.split(cmd), stdout=subprocess.PIPE) 
out, err = proc.communicate() 

sys.stdout = open("/tmp/test.txt", "w") 
print(out) 
sys.stdout.close() 
+0

'open ('/ tmp/test.txt', 'w')와 같이 f : f.write (출력) ' –

+0

이 질문의 정규식 부분은 어디에 있습니까? – DeepSpace

답변

0

는 문자열 'PTR'을 포함하는 줄을 인쇄하려면 코멘트 후 편집이 먼저 (각 행이 str 인) 라인의리스트로 출력을 분할 한 후 루프 구문의

import sys, os, re, shlex, urllib, subprocess 

cmd = 'dig -x %s @192.1.1.1' % sys.argv[1] 

proc = subprocess.Popen(shlex.split(cmd), stdout=subprocess.PIPE) 
out, err = proc.communicate() 

# Convert to list of str lines 
out = out.decode().split('\n') 

# Only write the line containing "PTR" 
with open("/tmp/test.txt", "w") as f: 
    for line in out: 
     if "PTR" in line: 
      f.write(line) 

또한 설명 : 그들은 'PTR'를 포함 할 경우 노선상의하여 검사하는 outproc.communicate()에서 반환 된 개체는 str이 아니라 bytes 개체입니다. out.decode()bytes에서 str으로 변환합니다. 그런 다음 문자열을 .split('\n')을 사용하여 줄로 나눕니다. 이제 for 회 돌이를 사용하여이 라인을 반복 할 수 있고 "PTR"이 라인의 서브 스트링인지 물어볼 수 있습니다. 일치하는 경우 해당 줄을 파일에 씁니다. 여러 줄에 "PTR"이 포함되어 있으면 줄 바꿈없이 파일에 모두 쓰게됩니다.

+0

'f.write (out)'은 더 의미가 있습니다. –

+0

네,하지만이 질문에 대한 시도에 더 가깝습니다. 또한'f.write (out)'과는 달리,'out'의 타입에 상관없이'print (out, file = f)'는 작동합니다 ('out'은'bytes' 타입입니다.) –

+0

안녕하세요. 답변을 이해할 수 없습니다 - 많은 결과가 나오는 경우를 생각해 봅시다. 하지만 "PTR"이라는 단어가 들어있는 줄만 파일에 쓰길 원합니다. 스크립트에서 어떻게 가져올 수 있습니까? – OmZ