为子进程编写文件输入

3

我需要在循环内部调用一个以文本文件为输入的程序。因为我不想一直打开和关闭文本文件,所以我将它保持在循环中处于打开状态。例如:

with open("test.txt",'r+') as w_file:

    w_file.write(str(0.8) + "\n" + str(0.2))
    subprocess.call(["cat","test.txt"]) #Here I want to call my routine

但是文件仍然处于旧状态。为什么?最好的处理方法是什么?


3
在你的write行之后但在subprocess.call行之前尝试使用 w_file.flush() - zondo
你可以使用print()函数:print(0.8, 0.2, sep="\n",file=w_file)或字符串格式化:w_file.write("{}\n{}".format(0.8, 0.2)) - jfs
2个回答

3

在写入文件后,您需要关闭文件。

请尝试以下代码:

with open("test.txt",'r+') as w_file:
    w_file.write(str(0.8) + "\n" + str(0.2))

subprocess.call(["cat","test.txt"]) #Here I want to call my routine

或者在不关闭文件的情况下,刷新文件。
with open("test.txt",'r+') as w_file:
    w_file.write(str(0.8) + "\n" + str(0.2))
    w_file.flush()
    subprocess.call(["cat","test.txt"]) #Here I want to call my routine

1
使用 w 模式而不是 r+ 来覆盖文件。 - jfs

0

这应该可以工作:

with open("test.txt",'r+') as w_file:
    w_file.write(str(0.8) + "\n" + str(0.2))
    w_file.flush()
    subprocess.call(["cat","test.txt"])

"flush" 方法将文件对象 w_file 引用的实际文件与仍在内存中的内容同步,因此当您通过文件名(而不是 w_file FLO)引用文件时,您将看到最新版本。


抱歉,在回答之前我打开了窗口一段时间,没有注意到其他人已经回答了。请忽略这个回答。 - martinredolatti

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接