Python 获取有关当前hg存储库的信息

Python 获取有关当前hg存储库的信息,python,python-3.x,mercurial,pydev,Python,Python 3.x,Mercurial,Pydev,使用subprocess.Popen(..) 此命令: HG_REV = subprocess.Popen(["hg", "log", "-l", "1", "../"], stdout=subprocess.PIPE).communicate()[0] 给我以下错误: File "/usr/lib/python3.4/site.py", line 182 file=sys.stderr) ^ SyntaxError: invalid syntax 但这个很好用:

使用
subprocess.Popen(..)

此命令:

HG_REV = subprocess.Popen(["hg", "log", "-l", "1", "../"], stdout=subprocess.PIPE).communicate()[0]
给我以下错误:

  File "/usr/lib/python3.4/site.py", line 182
    file=sys.stderr)
        ^
SyntaxError: invalid syntax
但这个很好用:

HG_REV = subprocess.Popen(['ls','-la'], stdout=subprocess.PIPE).communicate()[0]
有人能解释一下,为什么会发生这种错误,以及如何解决它吗

参考此帖子:

======================更新1============================================== 我发现它与pydev有关,我的eclipse中的任何东西都可能会改变环境变量。我非常确定,因为在linux shell上的文件(python3.4 test.py)中运行上述命令是有效的

以下是更多信息:

  • 虚拟机上的Ubuntu 14.04.3
  • 月蚀火星
  • 皮德夫
  • python3.4是当前配置(当我切换到python2.7时 (成功了)
  • (我也尝试了hglib,但运行时出现了完全相同的错误。)
    client=hglib.open(my\u mercurial\u repo)
    ,因为open也在使用
    子流程.Popen(..)

    =========================更新2==============================================
    当将
    PYTHONPATH
    设置为
    /usr/bin/python3.4
    时,代码工作!!但我觉得这种行为很奇怪。在虚拟机上使用python3.4的常用方法是什么?这个问题仍然没有解决。

    您似乎在从Python3安装中调用Mercurial(这是一个Python2程序)。根据路径和环境变量的设置方式,这可能是问题的根源;例如,Mercurial可能对指向Python3代码的PYTHONPATH或PYTHONHOME反应不好。另一方面,从Python编写Mercurial脚本最方便的方法可能是@ReimerBehrends:胡说八道。我已经在3.x的venv中多次使用了
    hg
    。它很好用。除非OP使用的是一些古老版本的hg或其他东西…@Kevin:我没说你不能在Python3程序中使用Mercurial(我自己做的)。我特别指出,这可能与(例如)环境变量有关。请注意,语法错误发生在Python3安装中,因此它肯定与Python3安装有关。@ReimerBehrends:venv将设置所有类型的环境变量。这就是使用venv的全部意义。@frankschmidt:首先检查是否设置了环境变量,例如通过
    subprocess.Popen([“env”])
    。如果没有设置任何一个,那么根本原因就不同了。如果设置了它们,您可能应该首先跟踪设置它们的原因(例如在shell配置文件中),然后清除它们。如果清除了它们,那么问题的原因是其他的(这似乎是一个试图使用Python 3代码的Python 2脚本,但也可能是一个损坏的Python 3安装或类似的东西)。根据路径和环境变量的设置方式,这可能是问题的根源;例如,Mercurial可能对指向Python3代码的PYTHONPATH或PYTHONHOME反应不好。另一方面,从Python编写Mercurial脚本最方便的方法可能是@ReimerBehrends:胡说八道。我已经在3.x的venv中多次使用了
    hg
    。它很好用。除非OP使用的是一些古老版本的hg或其他东西…@Kevin:我没说你不能在Python3程序中使用Mercurial(我自己做的)。我特别指出,这可能与(例如)环境变量有关。请注意,语法错误发生在Python3安装中,因此它肯定与Python3安装有关。@ReimerBehrends:venv将设置所有类型的环境变量。这就是使用venv的全部意义。@frankschmidt:首先检查是否设置了环境变量,例如通过
    subprocess.Popen([“env”])
    。如果没有设置任何一个,那么根本原因就不同了。如果设置了它们,您可能应该首先跟踪设置它们的原因(例如在shell配置文件中),然后清除它们。如果清除了它们,那么问题的原因是其他原因(这似乎是一个试图使用Python3代码的Python2脚本,但也可能是一个损坏的Python3安装或类似的东西)。