2013-09-06 2 views
1

Я следующий код, который отлично работает на Python 2.6.6:временный файл синтаксиса в Python 2.4.3

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?

+1

'with' statement можно использовать только в py2.5 + только –

ответ

1

Python 2.4 не поддерживает инструкцию with. Поэтому вам просто нужно открыть и закрыть окно scriptfile вручную.

scriptfile = tempfile.NamedTemporaryFile() 

# whatever you need to do with `scriptfile` 

scriptfile.close() 
+0

вы также можете включить синтаксис? – rahuL

+1

'try:', 'finally:' было бы полезно здесь, чтобы соответствовать поведению 'with'. –

0

The with-statement доступен только с Python 2.5 с помощью 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>) 

Есть некоторые различия но он может работать так, как в вашем случае.