Frage

Ich bin mir ziemlich sicher, dass der folgende Fehler der Tatsache zusammenhängt, dass ich mit einem Kollegen Code über SVN bin zu teilen, die ein Windows-System verwendet.

Ich selbst verwende ich Python auf Mac, die Bearbeitung mit Textmate.

#!/usr/bin/python

import os

from google.appengine.api import users
from google.appengine.ext import webapp
...

Wenn Sie sich diesen Code ausgeführt wird, erhalte ich einen Syntaxfehler:

events.py:2 invalid syntax

Gibt es eine End-of-line-Ausgabe, wenn SVN?

Dankbar für jeden Hinweis.


Bearbeiten

Das Problem verursacht wird, scheint nicht von SVN.

Interessanterweise direkt an der Shell ausgeführt wird, gibt es keine Syntaxfehler. Aber beide mit Textmate Validierung (mit PyCheckMate) und versucht, mit GoogleAppEngineLauncher starten Sie den Fehler zurück.

War es hilfreich?

Lösung

Während Python sollte über Zeilenenden nicht kümmern, Ihr Mac in der ersten Zeile nicht wie eine CRLF Leitung endet, so kann dies das Problem sein.

0000000 # ! / u s r / b i n / p y t h o n \r \n
                                          ^^

SVN kann gesagt werden Zeilenende zu übersetzen, indem die svn:eol-style Eigenschaft auf native. Es wird dann LF Endungen übersetzen in CRLF, wenn die Datei in Windows ausgecheckt ist, und Ihre Kollegen CRLF Endungen übersetzen an LF, wenn Sie auf Ihrem Mac überprüfen.

Andere Tipps

Während es stimmt, dass Zeilenende (in der Regel) unterschiedlich zwischen Windows und dem Rest der Computerwelt ist Python entwickelt, über das Thema Agnostiker zu sein. Normalerweise Python hat keine Probleme mit unterschiedlichen Zeilenenden.

Ich habe versucht, ein Python-Skript auf meinem Mac mit einer Vielzahl von Zeilenenden laufen und hatte keine Probleme. Beachten Sie, dass ich mein Skript ausgeführt wurde mit dem Befehl:

python test.py

statt

./test.py

Es könnte sich lohnen, beide Formen versuchen, um zu sehen, ob Ihr Problem Python ist wirklich, oder ob es um Ihre Schale / Kern verwandt ist. Ich weiß, dass einige Umgebungen tun haben Probleme mit CRLF Endungen auf der Shebang-Zeile.

Subversion ignoriert alle End-of-line (EOL) -styles. Es wird nie Ihre Dateien berühren, wenn Sie es so gesagt.

Wie kann man Subversion erzählt einen anderen EOL-Style zu benutzen? Durch die Einstellung Eigenschaft svn: eol-style , um Dateien in Frage:

svn propset svn:eol-style LF /path/to/my/file/in/workingcopy

Sie können überprüfen, ob Ihre Dateien, die diese Eigenschaften haben festgelegt, indem Sie:

svn proplist /path/to/my/file/in/workingcopy

Bytereihenfolgemarkierung? Nein, nativen EOL benötigt.

würde ich überrascht, wenn Python nicht nur still die üblichen Variationen Arten Rekord Terminator ignorieren.

Eine Schale oder Kern vielleicht nicht, aber dann würden Sie so etwas wie python: bad interpreter sehen.

Es ist möglich, dass es eine Stückliste oder Bytereihenfolgemarkierung am Anfang der Datei. Prüfen Sie es mit od -c events.py.

Die Stückliste ist nicht erforderlich und nicht in UTF-8 empfohlen, aber aus irgendeinem Grunde Windows Notepad hat die lästige Angewohnheit einen als erstes Zeichen in einer Datei einzufügen.

Also, wir dachten in den Kommentaren aus mit der Feststellung, dass python events.py fein gearbeitet, so dass es klar, dass die \r verwirrt die Skriptausführung des Kernels. (#! interp [arg] wird vom Kernel tatsächlich verarbeitet werden, wenn dies fehlschlägt, wird die Shell versuchen es, was zu dem Fehler gesehen.) Die Lösung ist in das svn Handbuch in der Eigenschaft svn:eol-style.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top