如何使用bash更改Python变量的值?

时间:2014-06-27 13:33:37

标签: python bash

我正在编写一个Bash脚本,它可以在Linux上自动执行安装过程。有一次,我需要进入一个Python文件,该文件用作正在安装的应用程序的配置文件,并将两个特定变量的值更改为新值。换句话说,假设我有一个包含的.py文件(注意:"apple""orange"可能会更改):

# Some code here
a = "apple"
b = "orange"
# Rest of file

我总是需要将这些值更改为具体 "banana""pear"

# Some code here
a = "banana"
b = "pear"
# Rest of file

如何使用Bash自动执行此更改?

3 个答案:

答案 0 :(得分:7)

可能在脚本的源代码上使用sed,但这会非常脆弱,而且通常很糟糕。

正确的解决方案可能是让脚本接受所需的值作为命令行参数,而不是。

答案 1 :(得分:2)

正如unwind所说,如果你可以修改python脚本,让它接受值作为参数。但是,有时你不能这样做,因为脚本是由一些外部包提供的。所以sed的就地搜索和替换看起来像这样:

sed -i 's/a = "apple"/a = "banana"/' filename    

使用bash变量,你必须使用""对于sed,否则shell不会扩展任何变量。这意味着你必须逃避文字"标记,使其不太清楚:

export TESTVAR="banana"
sed -i "s/a = \"apple\"/a = \"$TESTVAR\"/" filename

无论原始内容如何,​​都要交换它们:

sed -i 's/a = ".*"/a = "banana"/' filename

答案 2 :(得分:1)

Django也使用Python文件作为配置,并且有各种方法来处理这类问题。一个非常常见的方法是为不同的环境提供不同的配置文件集,并使用符号链接到相应的环境。一个可能更好的解决方案是让您的配置文件读取环境中的值(使用os.environ,可能使用合理的默认值) - 然后您只需在本地设置环境。

相关问题