我有以下代码在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中的语法是否有变化?
答案 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>)
存在一些差异,但它可能与您的情况一样。