问题可能与像命令行模拟器一样使用 python 子进程模块有关
我编写了一些名为 my_shell 的基础架构代码,您可以将我的应用程序的 shell 命令传递给它,如下所示
class ApplicationTestShell(object):
def __init__(self):
'''
Constructor
'''
self.play_ground_dir = "/var/tmp/MyAppDir"
ensure_dir_exists_and_empty(self.play_ground_dir)
def execute_command(self, command, on_success = None, on_failure = None):
p = create_shell_process(self, self.play_ground_dir)
sout, serr = p.communicate(input = command)
if p.returncode == 0:
on_success(sout)
else:
on_failure(serr)
def create_shell_process(self, cwd):
return Popen("/bin/bash", env= {WHAT DO I DO HERE?},cwd = test_dir, stdout=PIPE, stderr=PIPE, stdin=PIPE)
对我来说有趣的是 env 参数。Python 期望所有环境变量的“地图”数据结构。我的应用程序需要导出和设置几个变量。用于设置和导出的脚本是通过运行 say '/bin/appload myapp' 生成的(假设 appload 在路径上始终可用)。我目前做的是当我打电话给 p.communicate 我做以下
p.communicate(input = "eval `/bin/appload myapp`;" + command)
所以基本上在运行命令之前,我调用了基础设施设置。
- 有没有办法在 Python 中以更好的方式做到这一点。我想以某种方式将 eval /bin/appload 部分推送到 Popen 类的 env 参数中,或者作为 shell 创建过程的一部分。
- 我目前的实施有什么问题?(我觉得这很hacky,但我可能错了)