[root@234571-app2 git]# ./test.py
File "./test.py", line 4
with open("/home/git/post-receive-email.log",'a') as log_file:
^
SyntaxError: invalid syntax
Код похож на это:
[root@234571-app2 git]# more test.py
#!/usr/bin/python
from __future__ import with_statement
with open("/home/git/post-receive-email.log",'a') as log_file:
log_file.write("hello world")
и я использую Python 2.5.5
[root@234571-app2 git]# python -V
Python 2.5.5
То, что у вас есть, должно быть правильным. В Python 2.5 оператор with можно импортировать из __ future __
. Поскольку ваш код правильный, единственное объяснение, которое я могу придумать, это то, что ваша версия python не такая, как вы думаете. Есть большая вероятность, что в системе установлено несколько версий python, и по какой-то причине ваш код работает с более старой версией. Попробуйте запустить его так:
[root@234571-app2 git]# /usr/bin/python2.5 test.py
Предполагая, что это работает, вы можете изменить свою первую строку, чтобы указать, какая версия python вам нужна. Это может быть либо прямой путь к python2.5
, либо вы можете использовать команду env
для поиска пользовательской переменной PATH
для python2.5. Правильный подход зависит от того, какие установки Python установлены в вашей системе. Вот два подхода:
Чтобы использовать /usr/bin/python2.5 напрямую, вы можете сделать следующее:
#!/usr/bin/python2.5
Чтобы использовать ту версию python2.5, которая встречается первой в вашем PATH, сделайте следующее:
#!/usr/bin/env python2.5
Может быть, вот так?
#!/usr/bin/env python2.5
from __future__ import with_statement
with open("/home/git/post-receive-email.log",'a') as log_file:
log_file.write("hello world")
ответ на этот вопрос скрыт в комментариях OP. @Tamas дал правильное решение выше, как только @Tony подтвердил, что его код выполняется с помощью 2.4:
«Итак, / usr / local / bin / python
- это 2.5.5, но вы вызываете свой скрипт с / usr / bin / python
, то есть 2.4.3. Попробуйте заменить строку оболочки shebang следующим образом: #! / usr / bin / env python
. "
in в общем, будьте осторожны с жестким кодированием вашего пути, например, / usr / bin
, / usr / local / bin
и т. д., поэтому команда env
была изобрел. это особенно актуально, когда в вашей системе установлено несколько версий Python.
однако это было довольно явным признаком того, что это старая проблема Python, поскольку этот код OP будет выполняться на любом интерпретаторе версии 2.5 и новее. эта синтаксическая ошибка выдает это сообщение независимо от того, какую версию Python вы думаете используете.