Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/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 3.x 使用bash脚本导出的环境变量在python中不可访问_Python 3.x_Bash_Windows Subsystem For Linux - Fatal编程技术网

Python 3.x 使用bash脚本导出的环境变量在python中不可访问

Python 3.x 使用bash脚本导出的环境变量在python中不可访问,python-3.x,bash,windows-subsystem-for-linux,Python 3.x,Bash,Windows Subsystem For Linux,我有两个文件: run.sh train.py 两个文件的内容 in run.sh export TRAINING_DATA=test1 export FOLD=test2 python.exe train.py 在火车上 from os import environ print(environ.get("TRAINING_DATA"), environ.get("FOLD")) 当我通过命令行运行bash文件时 bash run.sh 我没有得到test1和test2,而是一个也没有得到

我有两个文件:

  • run.sh
  • train.py
  • 两个文件的内容 in run.sh

    export TRAINING_DATA=test1
    export FOLD=test2
    python.exe train.py
    
    在火车上

    from os import environ
    print(environ.get("TRAINING_DATA"), environ.get("FOLD"))
    
    当我通过命令行运行bash文件时

    bash run.sh
    
    我没有得到test1和test2,而是一个也没有得到
    这两个文件都放在my virtualenv的脚本文件夹中。我正在使用Windows 10。

    您应该尝试断开连接并重新登录会话。 发生在我身上,我就是这样解决的。 在我这方面,它位于ssh控制台上。
    祝你有一个美好的白天/夜晚-

    你应该尝试断开连接并重新登录会话。 发生在我身上,我就是这样解决的。 在我这方面,它位于ssh控制台上。
    祝你有一个美好的白天/夜晚-

    你遇到的问题是,你运行的是windows版本的python.exe,而不是linux/bash版本

    在run.sh中,我看到您引用的是python.exe,这是windows exe,因此,当它运行时,它将不会与用于调用它的.sh脚本位于同一个shell中

    您可以通过在WSL中执行以下操作来证明这一点

    ➜  which python.exe
    /mnt/c/Python27/python.exe
    ➜  which python
    /usr/bin/python
    
    因此,只要您在WSL中安装了python,就可以简单地交换.sh脚本中的.exe,这样您就可以使用bash/linux版本,因此:

    export TRAINING_DATA=test1
    export FOLD=test2
    python train.py
    

    您遇到的问题是,您运行的是windows版本的python.exe,而不是linux/bash版本

    在run.sh中,我看到您引用的是python.exe,这是windows exe,因此,当它运行时,它将不会与用于调用它的.sh脚本位于同一个shell中

    您可以通过在WSL中执行以下操作来证明这一点

    ➜  which python.exe
    /mnt/c/Python27/python.exe
    ➜  which python
    /usr/bin/python
    
    因此,只要您在WSL中安装了python,就可以简单地交换.sh脚本中的.exe,这样您就可以使用bash/linux版本,因此:

    export TRAINING_DATA=test1
    export FOLD=test2
    python train.py
    

    你能在操作系统的
    下添加
    print(environ.get('PATH'))
    看看你有什么收获吗?@SaurabhRai:将下面的行粘贴到你的bash shell中,让我们知道你看到了什么输出:
    FOO=bar python-c'import os;print(os.environ.get(“FOO”)”
    @Philippe:在os import environment
    下添加
    print(environ.get(“PATH”)
    后,我得到了我的PATH环境变量的值,我猜这是``FOO=bar python.exe-c'导入操作系统的预期输出;print(os.environ.get(“FOO”))“``was
    None
    。注意:我不得不用python.exe代替python,因为出于某种原因,我无法使用python关键字在我的bash shell中调用python解释器。我假设您没有安装可用于Linux的python。您能添加
    print(environ.get('PATH')吗
    在操作系统的
    下…
    查看您是否有任何收获?@SaurabhRai:将以下行粘贴到bash shell中,并让我们知道您看到的输出:
    FOO=bar python-c'import os;print(os.environ.get(“FOO”)'
    @Philippe:After添加
    print(environ.get('PATH'))
    在os import environ的
    下,我得到了PATH环境变量的值,我猜它是``FOO=bar python.exe-c'import os;print(os.environ.get(“FOO”)的预期输出“``was
    None
    。注意:我不得不用python.exe代替python,因为出于某种原因,我无法使用python关键字在我的bash shell中调用python解释器。我假设您没有安装可用于Linux的python。@Alex…您能详细说明一下断开连接的意思吗?我正在通过调用我的run.sh文件
    bash run.sh
    。你的意思是,在安装WSL和kali发行版后重新启动我的系统,然后是我做的。@Alex…你能详细说明一下断开连接的意思吗,我正在通过
    bash run.sh
    调用我的run.sh文件。你的意思是,在安装WSL和kali发行版后重新启动我的系统,然后是我做的。这实际上y帮我指出了正确的方向。我的WSL上没有安装python。我只是启用了WSL来运行bash脚本。我现在已经在WSL上安装了python,并用
    python3
    命令替换了
    python.exe
    ,现在我得到了所需的输出。谢谢。唯一的缺点是我现在必须维护python依赖项关于WSL:(.这实际上帮助我找到了正确的方向。我的WSL上没有安装python。我只是启用了WSL来运行bash脚本。我现在在WSL上安装了python,并用
    python3
    命令替换了
    python.exe
    ,现在我得到了所需的输出。谢谢。唯一的缺点是我现在必须维护p也依赖于WSL:(。