python - 从 bash 脚本运行多个 Python 脚本时将 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
我的流程如下:
script3.py
我在更改类变量的地方编辑源代码some_var
。- 我运行 bash 脚本。(注意脚本首先运行
python setup.py install
) script3.py
我在更改相同类变量的地方编辑源代码。- 我运行 bash 脚本。(注意脚本首先运行
python setup.py install
,还要注意这是在方法返回之前启动的train()
) - 重复几次。
我期望发生的事情:
我希望当我运行 bash 脚本时,将 bash 脚本和 Python 脚本加载到内存中,然后根据需要执行。具体来说:
train()
方法 from以then的script3.py
值运行,也返回some_var
script1.py
test()
方法 from以script3.py
相同的值运行some_var
then 返回,script2.py
也返回
实际发生的情况:
假设我在几分钟内运行了 3 次 bash 脚本。由于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
然而,这将是糟糕的代码质量并且也不切实际,因为现在我必须转念一想,这行不通。它的行为相同,始终使用上次编辑的值。some_var
在每次运行 bash 脚本之前更改 3 个位置。
问题:
实现这一目标的更好方法是什么?
我认为必须有一种方法可以在 bash 脚本的整个执行过程中将 Python 脚本加载到内存中。
限制(由于这是一个更大项目的一部分):
- 我不能在from or的
train()
ortest()
方法中传递额外的参数。script3.py
script1.py
script2.py
- 我无法将命令行参数传递给
script3.py
.
解决方案
推荐阅读
- javascript - [Vue 警告]:使用带有参数的 mixin 时无法挂载组件
- android - 将触摸事件从对话框片段传递到正下方的视图(在父活动内)
- google-apps-script - 在 Google 表格上的脚本中从右到左对齐希伯来语文本
- php - 执行数据库连接的 PHP 脚本后未显示成功或失败消息
- python - conda install 是否仍然找不到 jupyter 实验室的模块
- javascript - 你能在没有网络工作者的情况下停止 chrome 休眠选项卡吗
- c - Linux终端中C语言中用户输入的遗忘代码
- ruby-on-rails - 急切地加载 Rails 中关联实体的子集
- hadoop - Hadoop 中 Namenode 的内存
- python - 如何在 selenium 中修复此错误:AttributeError: 'list' object has no attribute 'find_elements_by_css_selector'