[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は、__future__
からインポートできるものとしてwithステートメントを導入しました。コードが正しいので、私が考えることができる唯一の説明は、pythonバージョンはあなたが思っているものではありません。システムにpython)の複数のバージョンがインストールされていて、何らかの理由でコードが古いバージョンで実行されている可能性があります。実行してみてくださいこのように:
[root@234571-app2 git]# /usr/bin/python2.5 test.py
これが機能すると仮定して、最初の行を変更して、python)のバージョンを指定できます。これは、python2.5
への直接パスにすることも、env
コマンドを使用することもできます。ユーザーのPATH
変数でpython2.5を検索します。正しいアプローチは、システムのpythonインストールが何であるかによって異なります。2つのアプローチは次のとおりです。
/usr/bin/python2.5を直接使用するには、次のようにします。
#!/usr/bin/python2.5
PATHで最初に発生するpython2.5のバージョンを使用するには、次のようにします。
#!/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のコメントに埋もれています。 @Tonyが自分のコードが2.4で実行されていることを確認すると、@ Tamasは上記の正しい解決策を示しました。
「つまり、/usr/local/bin/python
は2.5.5ですが、スクリプトを/usr/bin/python
(2.4.3)で呼び出しています。ShellShebang行を#!/usr/bin/env python
に置き換えてみてください。」
一般に、パス(/usr/bin
、/usr/local/bin
など)のハードコーディングには注意してください。これが、env
コマンドが発明された理由です。これは、システムに複数のバージョンのPythonがインストールされている場合に特に関係があります。
ただし、OPコードは2.5以降のインタプリタで実行されるため、古いPythonの問題でした。構文エラーは、=のバージョンに関係なくこのメッセージを表示します。 Pythonあなた考えるあなたが使用しています。