问题Python的子模块可以与Use python subprocess module like a command line simulator与预填充环境
我已经写了一些所谓的my_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)
我的应用程序的shell命令这里有趣的是env参数。 Python期望像所有环境变量的“映射”数据结构。我的应用程序需要导出和设置几个变量。用于设置和导出的脚本是通过运行say'/ bin/appload myapp'(假设appload始终可用于路径)生成的。我现在做的是 当我跑我所说的基础设施建立的命令之前调用p.communicate我下面
p.communicate(input = "eval `/bin/appload myapp`;" + command)
所以基本上。
- 有什么办法可以在Python中以更好的方式做到这一点。我以某种方式想要将eval/bin/appload部件推送到Popen类的OR参数或作为壳创建过程的一部分。
- 我目前的实施有哪些问题? (我觉得这是哈克,但我可能是错的)
所述Env映射可以基于'os.environ'映射,见[此旧矿答案](http://stackoverflow.com/questions/10935786/executing-python-subprocess-via- git-hook/10936091#10936091)为例。不知道如何将'/ bin/appload myapp'中的设置捕获到映射中。 – 2013-03-05 10:27:08
我可能会将其作为Jenkins作业运行,并且jenkins用户可能没有设置所有env变量。我可以从/ bin/appload myapp读取输出,并手动在MAP设置中写入相应内容,并按照您的显示使用它,但我将不得不为每个应用程序执行此操作,这是我试图避免的。我公司的所有cmd行应用程序都遵守/ bin/appload命令并打印需要“eval”编辑的内容 – 2013-03-05 10:42:17