subprocess.call没有等待

时间:2015-02-09 21:07:11

标签: python blocking

with open('pf_d.txt', 'w+') as outputfile:
        rc = subprocess.call([pf, 'disable'], shell=True, stdout=outputfile, stderr=outputfile)
        print outputfile.readlines()

output.readlines()返回[],即使文件是用一些数据写的。这里出了点问题。

看起来像subprocess.call()没有阻塞,并且在读取函数之后正在写入文件。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

with open('pf_d.txt', 'w+') as outputfile:构造称为上下文管理器。在这种情况下,资源是句柄/文件对象outputfile表示的文件。当上下文时,上下文管理器确保文件已关闭。关闭意味着刷新,然后重新打开文件将显示其所有内容。因此,解决您的问题的一个选项是在关闭之后读取您的文件

with open('pf_d.txt', 'w+') as outputfile:
    rc = subprocess.call(...)

with open('pf_d.txt', 'r') as outputfile:
    print outputfile.readlines()

另一个选择是在刷新和搜索之后重新使用相同的文件对象:

with open('pf_d.txt', 'w+') as outputfile:
    rc = subprocess.call(...)
    outputfile.flush()
    outputfile.seek(0)
    print outputfile.readlines()

文件句柄始终由文件指针表示,指示文件中的当前位置。 write()将此指针转发到文件末尾。 seek(0)将其移回到开头,以便后续的read()从文件的开头开始。