한 함수의 출력을 다른 함수로 읽으려고합니다.Popen() 기반 하위 프로세스로 작성된 파일에서 불완전한 읽기
두 단계로 나누면 명령 줄에서 첫 번째 함수 (journal.py)를 호출하고 두 번째 (ip_list.py)를 호출하면 원하는 결과를 얻을 수 있습니다.
첫 번째 가져 오기를 시도하고 두 번째로 실행할 경우 결과 목록이 비어 있습니다.
import re
import journal
journal.journal()
ip_list = []
with open('Invalid_names_file') as file1:
print(file1)
a = [re.search(r'((\d+\.)+\d+)', line).group() for line in file1]
print(a)
for x in a:
if x not in ip_list:
ip_list.append(x)
print(ip_list)
출력 ->
, 이런 식으로 난 구멍을 해요 파일이라는<_io.TextIOWrapper name='Invalid_names_file' mode='r' encoding='UTF-8'>
[]
[]
(스크립트 실행이 완료되면), 내가 기대하고있는 무슨과, 아직 내가 거기 가져 오기에 포함 시키려고 할 때 읽을 수 없습니다.
나는 무슨 일이 일어나고 있는지 이해하려고 노력할 수있을 정도로 print()를 가지고 있지만 그 주위에 머리를 들이지 못한다.
journal.py는 파일을 쓰는 Popen 명령입니다. Popen()
가 끝날 때까지 크리스
편집
journal.py
from subprocess import Popen
import os
def journal():
with open('Invalid_names_file', 'w') as Invalid_names_file:
Popen('journalctl -u sshd.service --no-pager --since -168hours\
--until today | grep Invalid', stdout=Invalid_names_file,\
universal_newlines=True, bufsize=1, shell=True)
if os.stat('Invalid_names_file').st_size == 0:
Popen('journalctl -u ssh.service --no-pager --since -168hours\
--until today | grep Invalid', stdout=Invalid_names_file,\
universal_newlines=True, bufsize=1, shell=True)
Invalid_names_file.close()
파일 스 니펫을 게시 할 수 있습니까? 내 가정 : 1)'저널'파일을 닫지 않습니다 2) 당신의 정규식이 작동하지 않습니다 –
정규식이 작동하지 않습니다. 읽을 줄은 다음과 같이 보일 것입니다. 'Sep 15 22:00:52 testing sshd [4588] : 192.168.122.10 포트 35630의 잘못된 사용자 marilyn'이 부분 인 파일은 0부터 ...까지 여러 줄이 될 수 있습니다. 긴, 그리고 정규식은 각 IP 주소의 한 번 발생으로 그것을 내려 놓습니다. 그래서 ... 10이 13 번 나타나면 한 번만 추가 할 수 있습니다. – emetib
@ Jean-FrançoisFabre, * 종료 할 때 * 반드시 파일을 닫습니다. 따라서 OP가 프로세스 완료시 차단되면 거기에는 문제가 없습니다. –