创build和从tempfile读取
有反正我可以写入临时文件,并将其包含在一个命令,然后closures/删除它。 我想执行命令,例如:some_command / tmp / some-temp-file。
提前谢谢了。
import tempfile temp = tempfile.TemporaryFile() temp.write('Some data') command=(some_command temp.name) temp.close()
如果您需要一个带有名称的临时文件,则必须使用NamedTemporaryFile
函数。 那么你可以使用temp.name
。 阅读http://docs.python.org/library/tempfile.html了解详情。;
完整的例子。
import tempfile with tempfile.NamedTemporaryFile() as temp: temp.write('Some data') if should_call_some_python_function_that_will_read_the_file(): temp.seek(0) some_python_function(temp) elif should_call_external_command(): temp.flush() subprocess.call(["wc", temp.name])
更新 :如评论中所述,这可能无法在Windows中工作。 使用这个解决scheme的Windows
尝试这个:
import tempfile import commands import os commandname = "cat" f = tempfile.NamedTemporaryFile(delete=False) f.write("oh hello there") f.close() # file is not immediately deleted because we # used delete=False res = commands.getoutput("%s %s" % (commandname,f.name)) print res os.unlink(f.name)
它只是打印临时文件的内容,但这应该给你正确的想法。 请注意,在外部进程看到它之前,该文件是closures的( f.close()
)。 这很重要 – 它确保所有的写入操作都被正确刷新(并且在Windows中,您没有locking文件)。 NamedTemporaryFile
实例一旦被closures,通常会被删除。 因此delete=False
位。
如果你想更多的控制过程,你可以尝试subprocess.Popen
,但它听起来像commands.getoutput
可能就足够你的目的。
改用NamedTemporaryFile
及其成员name
。 由于Unix文件系统的工作方式,普通的TemporaryFile
甚至不能保证有一个名字。