0

我很确定以下错误与我通过 SVN 与使用 Windows 系统的同事共享代码的事实有关。

我自己,我在 Mac 上使用 Python,使用 TextMate 进行编辑。

#!/usr/bin/python

import os

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

运行该代码时,出现语法错误:

events.py:2 invalid syntax

使用 SVN 时是否存在行尾问题?

感谢每一个提示。


编辑

该问题似乎不是由SVN引起的。

有趣的是,直接在 Shell 上执行,没有语法错误。但是使用 Textmate 验证(使用 PyCheckMate)和尝试使用 GoogleAppEngineLauncher 启动都会返回错误。

4

4 回答 4

4

虽然 Python 不应该关心行尾,但您的 Mac 不喜欢在第一行结束的 CRLF 行,所以这可能是您的问题。

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

svn:eol-style可以通过将属性设置为 来告诉 SVN 翻译行尾native。然后,当文件在 Windows 中签出时,它会将您的 LF 结尾转换为 CRLF,并在您在 Mac 上签出时将您同事的 CRLF 结尾转换为 LF。

于 2009-10-24T22:23:49.863 回答
1

字节顺序标记?不,需要本地 EOL。

如果 Python 不只是默默地忽略记录终止符样式的常见变化,我会感到惊讶。

shell 或内核可能没有,但你会看到类似python: bad interpreter.

文件顶部可能有 BOM 或字节顺序标记。检查它od -c events.py

在 UTF-8 中不需要也不推荐使用 BOM,但由于某种原因,Windows 记事本有一个讨厌的习惯,即在文件中插入一个作为第一个字符。

因此,我们在评论中指出它python events.py运行良好,明确表示\r混淆了内核的脚本执行。(#! interp [arg]实际上是由内核处理的,如果失败,shell会尝试,导致看到的错误。)解决方法在svn手册中的property中svn:eol-style

于 2009-10-24T21:53:28.337 回答
1

虽然确实 Windows 和其他计算世界的行尾(通常)不同,但 Python 被设计为不知道这个问题。通常 Python 对不同的行尾没有问题。

我尝试在我的 Mac 上运行具有多种行尾的 Python 脚本并且没有任何问题。请注意,我正在使用以下命令运行我的脚本:

蟒蛇测试.py

代替

./test.py

可能值得尝试这两种形式来查看您的问题是否真的是 Python 或者它是否与您的 shell/内核有关。我知道某些环境在 shebang 线上的 CRLF 结尾确实存在问题。

于 2009-10-24T21:54:15.763 回答
1

Subversion 忽略所有行尾(EOL)样式。除非您告诉它,否则它永远不会触及您的文件。

你如何告诉 Subversion 使用不同的 EOL 样式?通过将属性svn:eol-style设置为相关文件:

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

您可以使用以下方法检查您的文件是否设置了这些属性:

svn proplist /path/to/my/file/in/workingcopy
于 2009-10-24T21:54:32.940 回答