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

时间:2016-09-17 20:56:32

标签: python file-io popen

我正在尝试将一个函数的输出读入另一个函数。

如果我将事情分解为两个步骤,从命令行调用第一个函数(journal.py),然后调用第二个函数(ip_list.py)我得到我正在寻找的结果。

如果我尝试导入第一个并在第二个中运行它,结果列表为空。

a+b+c != c+b+a

输出 - >

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)

当以这种方式调用时,我正在打开的文件(一旦脚本运行完毕),我正在期待的东西,但当我尝试包含时,我无法从中读取它它与导入。

我有print()s,这样我就可以尝试了解发生了什么,但却无法理解它。

journal.py是一个写入文件的Popen命令。

编辑chris

journal.py

<_io.TextIOWrapper name='Invalid_names_file' mode='r' encoding='UTF-8'>
[]
[]

1 个答案:

答案 0 :(得分:1)

您应该等待Popen()完成。 将其返回值分配给变量并在其上调用wait()

p = Popen('journalctl ...')
p.wait()

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