python:使用call.subprocess编写后使用文件的问题

时间:2009-03-11 19:14:38

标签: python subprocess

在python中,我试图编写一个脚本来编辑文本文件,然后运行使用这些文本文件的可执行文件。它基本上需要1)打开和读/写文本文件,2)使用我刚刚在bash命令中写的文件。这是一个简单的例子:

import subprocess

# write file
a = ['1\n','2\n','3\n','4\n','5th and final line']
f = open('junk01.txt', 'wb')
f.writelines(a)
f.close

# show file
subprocess.call('cat junk01.txt', shell=True)

由于某种原因,subprocess.call命令没有显示junk01.txt文件的内容。但是,在运行此代码并在bash中键入cat junk01.txt后,文件已正确写入。同样地,我发现在打开,写入和关闭文本文件然后尝试在可执行文件中使用它之后,该文件尚未写入。有关为什么会这样做以及我可以做些什么来解决它的任何解释?

2 个答案:

答案 0 :(得分:9)

通过实际调用close()方法来关闭文件。这将隐式将缓冲区刷新到磁盘。

f.close()

而不是

f.close     #this probably doesn't do anything, but if there was no close method it would raise an error.

答案 1 :(得分:0)

虽然第一个答案肯定是正确和正确的,但您也可以将f设置为None而不是按以下方式进行:

import subprocess

# write file
a = ['1\n','2\n','3\n','4\n','5th and final line\n']
f = open('junk01.txt', 'wb')
f.writelines(a)
f = None
# show file
subprocess.call('cat junk01.txt', shell=True)

将f设置为None会使变量退出服务并导致文件被隐式关闭而不是显式关闭(如第一个首选示例中所示) 我并不主张这种编写代码的方式有点草率,我只是提到它作为替代解决方案。

[centos@localhost ~/test/stack]$  python 1.py
1
2
3
4
5th and final line
[centos@localhost ~/test/stack]$