2

我有以下在 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 的语法有变化吗?

4

2 回答 2

2

Python 2.4 不支持该with语句。所以你只需要scriptfile手动打开和关闭。

scriptfile = tempfile.NamedTemporaryFile()

# whatever you need to do with `scriptfile`

scriptfile.close()
于 2013-09-06T06:40:08.653 回答
0

-statementwith仅在 Python 2.5 using 之后才可用from __future__ import with_statement并且从 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>)

有一些差异,但它可能适用于您的情况。

于 2013-09-06T06:53:37.137 回答