Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中当前工作目录不匹配_Python_Getcwd - Fatal编程技术网

python中当前工作目录不匹配

python中当前工作目录不匹配,python,getcwd,Python,Getcwd,我已经在eclipse中导入了一个现有的文件系统文件夹作为新的项目文件夹。我有一个脚本,它获取代码的当前工作目录路径。我需要将目录位置更改为访问与之相关的其他目录中的文件。但是当从eclipse和命令行执行时,它给出了不同的值。两个地方的位置都一样。请帮我解决这个问题。这里的操作系统是windows import os print os.getcwd() os.chdir(os.path.dirname(os.getcwd())) print os.getcwd() 一个结果是这样的 C:\A

我已经在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
另一个结果是这样的

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

第二个结果是我期望的结果,这就是代码的确切位置。

我使用了sys包而不是操作系统。它按预期工作

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

我可以从eclipse和命令行运行它,以获得正确的路径。谢谢你的帮助。

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

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

if not basedir:
     basedir = sys.path[0]    # We are on commandline. sys.path OK
然后使用basedir查找您的文件

更新

您必须在解释器的运行时指定此变量

窗口->首选项->PyDev->解释器->Python解释器选项卡(环境),通过选择名称为PROJECT\U LOC和variable的NEW(另一个按钮)并选择PROJECT\U LOC,您可以指定引用PROJECT\U LOC的PROJECT\U LOC

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

你现在可以和我一起检查

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

项目地点现在应该在那里

请提供您得到的不同结果。请指定您使用的操作系统,因为并非所有操作系统都提供所有功能。当您的代码在eclipse中运行时,您有一定数量的环境变量,包括eclipse\u HOME、PARENT\u LOC、PROJECT\u LOC和WORKSPACE\u LOC。使用它们来构建您的路径。在eclipse中运行时不能依赖getcwd()。在命令行中,您可以。只需检查这些变量是否存在。如果有,请使用它们,如果没有。。。使用getcwd()@Lescurel,我已经提供了这些信息。@mbiern,我相信代码应该是通用的,可以在这两种语言中运行。当然,我们应该如何做到这一点。我的意思是,您必须在函数中对其进行编码,如
loc=os.environ.get('PROJECT\u loc',None)
。如果loc为none,则使用getcwd,否则将loc用作有用脚本的basedir。此项目的loc由eclipse自己设置?是的。如果设置好了,你肯定是在日食中跑步,这很好。很好,我今天学的。我一直认为getcwd会给出正确的结果。非常感谢mbierngecwd()或sys.path[0]可以是任何内容,例如eclipse进程或启动进程的cwd。。if块中的代码是什么,并且始终获取sys.path,即使在从eclipse运行时也是如此。为什么会这样?那不是!这对我来说就像预期的那样。你能告诉我这是干什么用的吗@ChristianTernus查看我发布的链接
sys.path
显示Python路径(解释器在其中搜索模块),而不是OS当前工作目录。