Я пытаюсь прочитать вывод из одной функции в другую.Неполные чтения из файла, написанного подпроцессом 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'>
[]
[]
при вызове таким образом, файл, который я открываю это есть (после того, как скрипт выполняется работает), с тем, что я жду, пока я не может заставить его читать его, когда я пытаюсь включить его с импортом.
У меня есть печать(), так что я могу попытаться понять, что происходит, но не может обернуться вокруг него.
journal.py - это команда 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) 'journal' не закрывает файл 2) ваше регулярное выражение не работает –
regex действительно работает. строка, которая будет считана, будет выглядеть так: «Сен 15 22:00:52 тестирование sshd [4588]: неверный пользователь marilyn с 192.168.122.10 порт 35630« файл, в котором это часть, может быть от нуля до ... много строк long, и регулярное выражение переместит его на один вид каждого IP-адреса. поэтому, если ... 10 отображается 13 раз, он будет добавлен только один раз. – emetib
@ Jean-FrançoisFabre, когда он * выходит *, он обязательно закрывает файл, поэтому, если OP блокирует завершение процесса, там не может быть никакой проблемы. –