Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.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 PyDev自定义解释器脚本不';t读取环境变量_Python_Shell_Environment Variables_Pydev - Fatal编程技术网

Python PyDev自定义解释器脚本不';t读取环境变量

Python PyDev自定义解释器脚本不';t读取环境变量,python,shell,environment-variables,pydev,Python,Shell,Environment Variables,Pydev,我在解释器信息的script元素中定义了一个自定义python解释器。我还在那里定义了一些环境变量,当我在PydevUI中查看解释器信息时,就会看到它们 解释器可执行文件是一个外壳脚本(tcsh),它封装了python解释器。它工作正常,只是看不到为解释器设置的环境变量。我原以为这些将在可执行脚本的环境中设置,但事实并非如此。是否有一种方法可以将为解释器信息定义的变量传递到解释器的可执行脚本中 编辑: 当任何PyDev项目被添加到工作区时,我会修改script元素,以便它用一个封装python解

我在解释器信息的script元素中定义了一个自定义python解释器。我还在那里定义了一些环境变量,当我在PydevUI中查看解释器信息时,就会看到它们

解释器可执行文件是一个外壳脚本(
tcsh
),它封装了python解释器。它工作正常,只是看不到为解释器设置的环境变量。我原以为这些将在可执行脚本的环境中设置,但事实并非如此。是否有一种方法可以将为解释器信息定义的变量传递到解释器的可执行脚本中

编辑:

当任何PyDev项目被添加到工作区时,我会修改script元素,以便它用一个封装python解释器的shell脚本替换python解释器的路径。下面是Java代码,省略了异常处理

private static解释器rinfo create解释器rinfo(字符串解释器,IProgressMonitor监视器)引发CoreException异常{
最终文件script=PydevPlugin.getScriptWithinPySrc(“解释器info.py”);
元组输出;
outTup=new SimplePythonRunner().runandGetOutputWith解释器(解释器,script.getCanonicalPath(),null,null,监视器,“UTF-8”);
字符串解释器xml=outTup.o1;
String replacedInterpreterXml=解释器XML;
//用脚本替换XML字符串中的元素
字符串executableStartTag=“”;
字符串executableEndTag=“”;
int executableElementStart=解释器xml.indexOf(executableStartTag)+executableStartTag.length();
int executableElementEnd=解释器xml.indexOf(executableEndTag);
replacedInterpreterXml=解释器XML.substring(0,executableElementStart)+解释器+解释器XML.substring(executableElementEnd);
//添加环境变量
字符串xmlEndTag=“”;
int xmlEndElementStart=replacedInterpreterXml.indexOf(xmlEndTag);
replacedInterpreterXml=replacedInterpreterXml.substring(0,xmlEndElementStart)+
“\n”+
某些变量+“=”+环境变量值+
“\n”+
substring(xmlEndElementStart);
返回解释器rinfo.fromString(replacedInterpreterXml,false);
}
然后,包装器脚本执行一些环境设置,并使用命令字符串调用python解释器。当解释器返回时,脚本将执行环境分解。通过在shell环境中查找或让python解释器查询其环境,脚本无法找到在
解释器信息
上设置的环境变量

下面是包装器shell脚本的一个表示:

#!/bin/tcsh

#redirect output to avoid corrupting output to `InterpreterInfo`
echo Env variable SOME_VARIABLE = $SOME_VARIABLE > /log/file #throws error because SOME_VARIABLE is not set
python -c "import os;print os.environ['SOME_VARIABLE']" > /log/file #no value set for SOME_VARIABLE

do_environment_setup

python $*

do_environment_cleanup

你打算怎么做?您应该共享任何命令行吗?请参阅问题中的编辑以获得进一步的解释和代码片段。谢谢,打字错误出现在文章中,但不在实际脚本中,因为我当然使用了不同的变量名(实际上有三个)。当我决定的时候,我总是使用bash。我的项目支持一个需要tcsh的过时库。我没有在我的项目中使用该库,在这种情况下,我可以使用其他库来代替它。相反,我的项目是为库提供一个IDE,所以我没有选择避免tcsh。您是如何尝试这样做的?您应该共享任何命令行吗?请参阅问题中的编辑以获得进一步的解释和代码片段。谢谢,打字错误出现在文章中,但不在实际脚本中,因为我当然使用了不同的变量名(实际上有三个)。当我决定的时候,我总是使用bash。我的项目支持一个需要tcsh的过时库。我没有在我的项目中使用该库,在这种情况下,我可以使用其他库来代替它。相反,我的项目是为库提供一个IDE,所以我没有选择避免tcsh。