python 2.4.3中的tempfile语法

时间:2013-09-06 06:39:14

标签: python with-statement python-2.4

我有以下代码在Python 2.6.6上完美运行:

import tempfile
with tempfile.NamedTemporaryFile() as scriptfile:
        scriptfile.write(<variablename>)
        scriptfile.flush()
        subprocess.call(['/bin/bash', scriptfile.name])

但是,当我尝试在Python 2.4.3上运行它时,我收到以下错误:

File "<stdin>", line 2
    with tempfile.NamedTemporaryFile() as scriptfile
                ^
SyntaxError: invalid syntax

Python 2.4.3中的语法是否有变化?

2 个答案:

答案 0 :(得分:1)

Python 2.4不支持with语句。因此,您只需手动打开和关闭scriptfile

scriptfile = tempfile.NamedTemporaryFile()

# whatever you need to do with `scriptfile`

scriptfile.close()

答案 1 :(得分:0)

The with-statement仅在使用from __future__ import with_statement的Python 2.5后可用,并且自Python 2.6起默认启用。

要模仿其行为,您可以使用try/finally

#!/usr/bin/env python2.4
import subprocess
import tempfile

scriptfile = tempfile.NamedTemporaryFile()
try:
    scriptfile.write(<variablename>)
    scriptfile.flush()
    subprocess.call(['/bin/bash', scriptfile.name])
finally:
    scriptfile.close()
不过,你可以通过管道传递脚本来避免在磁盘上创建文件:

from subprocess import Popen, PIPE

p = Popen('/bin/bash', stdin=PIPE)
p.communicate(<variablename>)

存在一些差异,但它可能与您的情况一样。