从bash scrip运行多个Python脚本时,将Python脚本加载到内存中

2024-03-29 13:36:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我的bash脚本如下所示:

#!/bin/bash
{
    var1='stuff'
    var2='more stuff'

    cd path/to/package &&
    python setup.py install &&

    printf "Ok, we're gonna run this bad boy" &&
    (
        printf "Training" &&
        python -u script1.py "${var1}" "${var2}" &&
        printf "Testing" &&
        python -u script2.py "${var1}"
    ) 2>&1 | tee log.txt

    exit
}

bash脚本运行script1.py,完成后运行script2.py。你知道吗

设置:

script1.py通过其他Python脚本中定义的某些方法读取一些数据,然后创建在script3.py中定义的类的实例,并调用该类中的train()方法。这种train()方法运行数小时。当这个train()方法返回时,script1.py也返回。你知道吗

script2.py通过其他Python脚本中定义的某些方法读取一些数据,然后创建在script3.py中定义的类的实例,并调用该类中的test()方法。这种test()方法运行数小时。当这个test()方法返回时,script2.py也返回。你知道吗

script3.py和执行数据读取的Python脚本是Python包的一部分。你知道吗

script3.py看起来像这样:

class MyClass():

    some_var = '' # Enum value

    def __init__(self):
        print('Initialized this bad boy')

    def train(self, param1, param2):
        # some code goes here, uses class variable some_var

    def test(self, param1, param2):
        # some code goes here, uses class variable some_var

我的流程如下:

  1. 我在script3.py中编辑源代码,在这里我更改了类变量some_var。你知道吗
  2. 我运行bash脚本。(注意脚本首先运行python setup.py install
  3. 我在script3.py中编辑源代码,在那里我更改了相同的类变量。你知道吗
  4. 我运行bash脚本。(请注意,脚本首先运行python setup.py install,还请注意,这是在train()方法返回之前启动的)
  5. 重复几次。你知道吗

我期望发生什么:

我希望在运行bash脚本时,bash脚本和Python脚本被加载到内存中,然后根据需要执行。具体来说:

  • 来自script3.pytrain()方法以值some_var运行,然后返回script1.py
  • 来自script3.pytest()方法使用相同的some_var值运行,然后返回script2.py

实际情况:

假设我在几分钟内运行bash脚本3次。由于train()方法需要几个小时才能执行,当执行到达test()方法时,类变量some_var被更改为源代码的最后一次编辑,因此所有3次运行都使用相同的some_var值,特别是在第三次运行bash脚本之前在最后一次编辑中设置的值。你知道吗

快速解决方法:

一个快速解决方法是将script3.py编辑成这样:

class MyClass():

    some_var = 'value1' # Enum value

    def __init__(self):
        print('Initialized this bad boy')

    def train(self, param1, param2):
        self.some_var = 'value1'
        # some code goes here, uses class variable some_var

    def test(self, param1, param2):
        self.some_var = 'value1'
        # some code goes here, uses class variable some_var

然而,这将是糟糕的代码质量,也不切实际,因为现在我必须在每次运行bash脚本之前更改3处some_var仔细想想,这是行不通的。它的行为相同,总是使用上次编辑的值。你知道吗

问题:

实现这一目标的更好方法是什么?
我认为在bash脚本的整个执行过程中,必须有一种方法将Python脚本加载到内存中。你知道吗

限制(由于这是一个更大项目的一部分):

  • 我无法从script1.pyscript2.py传递script3.pytrain()test()方法中的额外参数。你知道吗
  • 我无法将命令行参数传递给script3.py。你知道吗

Tags: 方法pytestself脚本bash编辑var