Python 从基于Popen()的子进程写入的文件读取不完整

Python 从基于Popen()的子进程写入的文件读取不完整,python,file-io,popen,Python,File Io,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.sear

我试图将一个函数的输出读入另一个函数

如果我将事情分解为两个步骤,从命令行调用第一个函数(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'>
[]
[]

您应该等待
Popen()
完成。 将其返回值赋给变量,并对其调用
wait()

p = Popen('journalctl ...')
p.wait()
单独运行日志脚本时,父进程将仅在其所有子进程终止时返回。 但是,
Popen()
不会等待,除非您告诉它。
因此,在您的情况下,
journal()
函数在启动子流程后立即退出,因此在您读取目标文件时,它仍然是空的或不完整的。

您可以发布文件的片段吗?我的假设:1)
journal
不关闭文件2)您的正则表达式不工作正则表达式工作。要读取的行如下所示“Sep 15 22:00:52 testing sshd[4588]:192.168.122.10 port 35630中的无效用户marilyn”。此文件的一部分可以是从零到…多行,并且正则表达式会将其降到每个ip地址的一个实例。因此,如果…10出现13次,它只会被追加到列表中一次。@Jean-Françoisfare,当它退出时,它必然会关闭文件,因此如果OP在进程完成时阻塞,则不会有任何问题。好的,但OP没有提供
日志
代码。我总是在这里做跑腿工作:)@Jean Françoisfare,我在看到你的评论之前添加(编辑)了它。谢谢你的帮助谢谢你,伦茨。我不知道我是否有种族问题。我在看io,但这一点都没有帮助。我认为这些文档对如何使用
Popen()
没有太多指导意义。他们似乎鼓励更多地使用模块函数
call()
check\u output()
等。
p = Popen('journalctl ...')
p.wait()