【问题标题】:current working directory mismatch in pythonpython中的当前工作目录不匹配
【发布时间】:2017-09-08 13:31:15
【问题描述】:

我已经将一个现有的文件系统文件夹作为 eclipse 中的新项目文件夹导入。我有一个脚本可以获取代码的当前工作目录路径。我需要更改目录位置以访问与其相关的其他目录中的文件。但是当从 eclipse 和命令行执行时,它给出了不同的值。两个地方的位置都一样。请帮我解决这个问题。操作系统在这里是windows

import os
print os.getcwd()
os.chdir(os.path.dirname(os.getcwd()))
print os.getcwd()

一个结果是这样的

C:\Automation\trunk\Base\TestScripts
C:\Automation\trunk\Base

其他结果是这样的

C:\Automation\trunk\UsefulScripts
C:\Automation\trunk

第二个结果是我所期望的,也就是代码所在的位置。

【问题讨论】:

  • 请提供您得到的不同结果。请指定您使用的操作系统,因为并非所有操作系统都提供所有功能。
  • 当你的代码在 Eclipse 中运行时,你有一定数量的环境变量,包括 ECLIPSE_HOME、PARENT_LOC、PROJECT_LOC 和 WORKSPACE_LOC。使用它们来构建您的路径。在 Eclipse 中运行时不能依赖 getcwd()。在命令行上你可以。只需检查这些变量是否存在。如果存在,则使用它们,如果不存在...使用 getcwd()
  • @Lescurel,我已经提供了这些信息。
  • @mbieren,我相信代码应该是通用的,可以在两者中运行。应该如何实现。
  • 当然。我的意思是你必须在你的函数中编写这个代码,比如loc = os.environ.get('PROJECT_LOC',None)。如果 loc 没有使用 getcwd ,否则使用 loc 作为 UsefulScripts 的 basedir

标签: python getcwd


【解决方案1】:

当心你不能依赖它。执行以下操作:

basedir = os.environ.get('PROJECT_LOC', None)

if not basedir:
     basedir = sys.path[0]    # We are on commandline. sys.path OK

然后使用 basedir 查找您的文件

更新

你必须在解释器的运行时指定这个变量

window->preferences->PyDev->Interpreters->Python Interpreter TAB (environment) 您可以在此处指定 PROJECT_LOC,方法是选择带有名称 PROJECT_LOC 和变量(另一个按钮)的 NEW 并选择 project_loc。

由于某些原因,这些变量在 python 中不可见。

您现在可以使用

def read_all_variables():
    for key in os.environ.keys():
        print ("%30s %s" % (key,os.environ[key]))

PROJECT_LOC 现在应该在那里

【讨论】:

  • 这个PROJECT_LOC是eclipse自己设置的吗?
  • 是的。如果已设置,您确定您正在 eclipse 中运行
  • 很好。很好,我今天学到了这个。我一直认为 getcwd 会给出正确的结果。非常感谢mbieren
  • getcwd() 或 sys.path[0] 可以是任何东西,例如。 eclipse-process 或启动进程的 cwd .. 随便
  • 代码进入了 if 块,即使我从 Eclipse 运行,也总是得到 sys.path。为什么会这样?
【解决方案2】:

我使用的是 sys 包而不是 os。它按预期工作。

import os,sys
currentpath = sys.path[0]
print currentpath

我可以从 Eclipse 和命令行运行它来获得正确的路径。感谢您的帮助。

【讨论】:

  • 那不是what sys.path does
  • 它按预期对我有用。你能详细说明它的用途吗? @ChristianTernus
  • 查看我发布的链接。 sys.path 显示 Python 路径(解释器在其中搜索模块),而不是 OS 当前工作目录。
猜你喜欢
  • 1970-01-01
  • 2020-07-20
  • 2014-01-14
  • 1970-01-01
  • 2020-02-24
  • 2016-03-22
  • 2013-11-27
相关资源
最近更新 更多