在创建和写入之后,我尝试使用Popen()来捕获文件。它不起作用。 Print p给出两个空元组('','')。为什么?我已经使用重命名来确保原子写入,如here所述。
#!/usr/bin/env python
import sys,os,subprocess
def run(cmd):
try:
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
p.wait()
if p.returncode:
print "failed with code: %s" % str(p.returncode)
return p.communicate()
except OSError:
print "OSError"
def main(argv):
t = "alice in wonderland"
fd = open("__q", "w"); fd.write(t); fd.close; os.rename("__q","_q")
p = run(["cat", "_q"])
print p
main(sys.argv)
答案 0 :(得分:11)
您没有致电close
。使用fd.close()
(你忘了那里的括号使它成为一个实际的函数调用)。使用with
- 语句可以防止这种情况:
with open("__q", "w") as fd:
fd.write(t)
# will automatically be closed here