【问题标题】:Export a variable from bash and use it in Python从 bash 导出一个变量并在 Python 中使用它
【发布时间】:2018-05-29 08:21:43
【问题描述】:

我正在尝试编写一个在 Linux 服务器上执行几件事的脚本,我想将 bash 用于大多数 Linux 特定命令,并且只将 Python 用于最复杂的东西,但为了做到这一点我需要从 bash 脚本中导出一些变量并在 python 脚本中使用它们,但我没有找到一种方法可以做到这一点。所以我尝试创建两个非常小的脚本来测试这个功能: 1.sh 是一个bash脚本

#!/bin/bash

test_var="Test Variable"
export test_var
echo "1.sh has been executed"
python 2.sh

2.sh 是一个 Python 脚本:

#!/usr/bin/env python3

print("The python script has been invoked successfully")
print(test_var)

你可以猜到,当我执行第一个脚本时,第二个脚本失败并出现关于未知变量的错误:

$ ./1.sh
1.sh has been executed
The python script has been invoked successfully
Traceback (most recent call last):
  File "2.sh", line 4, in <module>
    print(test_var)
NameError: name 'test_var' is not defined

我之所以尝试这样做是因为我更习惯使用 bash,并且我想在 bash 中使用 $1、$2 变量。这在 Python 中也可以吗?

[编辑] - 我刚刚发现如何在 Python 中使用 $1 和 $2 它。你需要使用sys.argv[1]sys.argv[2]并导入sys模块import sys

【问题讨论】:

  • 如果您不想访问环境变量,为什么不直接使用os.environ['test_var']
  • 您也可以将变量传递给 Python 脚本:python 1.py "variable-value"

标签: python linux bash shell


【解决方案1】:

要使用 Python 脚本中的环境变量,您需要调用:

import os
os.environ['test_var']

os.environ 是一个包含所有环境变量的字典,你可以使用字典所有的方法。例如,你可以写:

os.environ.get('test_var', 'default_value')

【讨论】:

  • 感谢它有效,但我认为您可以轻松省略 , 'default_value' 部分。它适用于 os.environ.get('test_var')
  • 如果您使用简单的字典查找os.environ['test_var'],它也可以工作。仅在有意义的情况下使用带有默认值的 get 方法 - 当值并不总是存在于环境变量中时。
【解决方案2】:

检查 python 扩展名应该是 .py 而不是 .sh 1.sh

#!/bin/bash
 test_var="Test Variable"
 export test_var
 echo "1.sh has been executed"
 python 2.py

os 库将为您提供环境变量的访问权限。以下python代码将为您提供所需的结果,

#!/usr/bin/env python3
import os
print("The python script has been invoked successfully")
print(os.environ['test_var'])

检查参考:How do I access environment variables from Python?

【讨论】:

  • 我认为您需要在打印语句中输入.get,没有它就不起作用:print(os.environ.get['test_var'])
  • @GeorgеStoyanov 我已经在 ubuntu 上执行了上面的代码,它在没有 .get 的情况下工作。
  • 如果我在没有.get 的情况下执行它,我会收到错误:AttributeError: _Environ instance has no __call__ method。我也在使用 Ubuntu 16.04.4 LTS。
  • 如果我用 .get 执行,得到一个错误 Traceback (最近一次调用最后): File "2.py", line 4, in print(os.environ.get['test_var ']) TypeError: 'method' 对象不可下标
  • 哦我弄错了
猜你喜欢
  • 1970-01-01
  • 2016-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多