我在终端内运行了以下子进程/命令:$ eval $(docker-machine env machine-name)
我假设python的等价物是:sp = subprocess.run(["eval", "$(docker-machine env {})".format(self.project_machine_name)])
或者也许:sp = subprocess.run(["eval", "$(docker-machine", "env", "{})".format(self.project_machine_name)])
然而,上述两种方法似乎都不起作用。
我想知道,我将如何在python脚本中运行上面的eval
...
N.B. * 为简洁起见,假设self.project_machine_name = 'machine-name'*
这与调用子进程不同,因为它需要是eval()
。
2条答案
按热度按时间yh2wf1be1#
尝试
更多信息和其他参数-在文档中
EDIT:如果您想要输出,请使用
subprocess.check_output()
。mzsu5hc02#
这取决于你想做什么,但我可能正在做一些类似的事情,我正在minikube中构建我的dockers,我有一个python脚本来构建这些dockers。
在运行Docker构建之前,我需要确保设置了正确的环境变量,这意味着我需要运行
它会生成一组要在shell中运行的语句(通常使用eval)
为了能够在python中触发我的构建,我需要在我使用docker构建命令时设置这些环境变量。
现在基本上有两种方法可以做到这一点(除了在脚本的 Package 器中进行eval之外),两种方法都涉及到使用export命令获取该字符串。
1.解析minikube(或docker-machine命令)的结果,并在shell中为将来的子进程设置这些变量。由于您知道docker-machine命令的输出,因此使用RE可能会有点草率。shell=True只是用于回显。
1.稍微草率一点,也更容易受到注入攻击,只需将字符串夹在一起,这样所有命令基本上都是一个以一堆导出开始的脚本,这几乎没有那么干净,并将您锁定在使用shell=True子进程功能上,但它确实有效。