如何通过bash改变Python变量的值?

-1 投票
3 回答
2042 浏览
提问于 2025-04-18 11:20

我正在写一个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 个回答

1

Django也使用Python文件来进行配置,而且有很多方法可以解决这个问题。一个很常见的方法是为不同的环境准备不同的配置文件,然后用一个符号链接指向合适的文件。还有一种可能更好的方法是让你的配置文件从环境中读取值(使用os.environ,可以设置一个合理的默认值)——这样你只需要在本地设置环境就可以了。

7

可能可以通过在脚本的源代码上使用 sed 来实现,但这样做会很脆弱,而且通常效果不好。

更好的解决办法是让脚本接受需要的值作为命令行参数,这样会更合适。

3

正如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

撰写回答