0

这就是我运行myscript.sh中设置的 bash 脚本的方式

#!/bin/bash
import subprocess
child = subprocess.Popen(['bash', '-c', '/bin/bash myscript.sh'], stdout = subprocess.PIPE)
output=child.communicate()
print(output)

脚本文件

我为什么要这样做是因为我必须运行的 bash 脚本没有导出命令,所以我在这里呼应。代码如下。我知道回显不会设置环境变量,但我只想回显它并获取值所以回显而不是导出。

#!/bin/bash
source ia_servers
echo $IA_SRV_cs68_64

其中$IA_SRV_cs68_64

这是列出变量值的 ia_servers 文件,它看起来像这样

IA_SRV_cs68_64="ds1 ds2 ds3 ds5 "

这就是变量在其中的方式。很多其他变量都因为设置太长而在里面去掉了。

TESTED 从终端运行良好:

  • 来源 ia_servers
  • 回声 IA_SRV_cs68_64

打印所需的值集

问题: 虽然myscript.sh正在工作并打印 variables 。我想要的是我不想创建一个单独的文件,在那里写一个 bash 脚本来回显 myscript.sh 中的变量,而是将它写在 python 中。

我如何在 python 中完成它,而不是制作脚本文件并运行它。

4

2 回答 2

0

这是运行任何类型的脚本或程序的通用方法,其中程序输入嵌入在 Python 脚本中。

import subprocess
scriptres = subprocess.Popen("/bin/bash", 
                             stdin=subprocess.PIPE,
                             stdout=subprocess.PIPE,
                             stderr=subprocess.PIPE).communicate(r'''
# your bash script here
ls
pwd
source whatever
echo $SOMETHING
''')

script_stdout = scriptres[0]
script_stderr = scriptres[1]
于 2017-06-07T08:02:57.090 回答
0
# i assume there is a file by name `ia_servers` with variable IA_SRV_cs68_64="ds1 ds2 ds3 ds5 "

import imp
ia_servers =imp.load_source('ia_servers', 'path to `ia_servers` file')

print ia_servers.IA_SRV_cs68_64 # this should print `ds1 ds2 ds3 ds5` 
于 2017-06-07T08:05:26.910 回答