如何从python执行bash脚本(bash文件包含用户输入)

时间:2019-09-19 08:27:58

标签: python

我需要一个通过ssh连接到我的服务器(openstack)的python脚本,然后有一个bash文件demo-openrc.sh(此bash脚本需要首先执行,然后我将运行以下命令,例如openstack服务器列表(它将返回我所有实例的列表)),但问题是bash脚本包含环境变量,并且openstack项目有1个用户输入,我该如何在python中从用户那里获取此bash环境变量输入

from _multiprocessing import send

import paramiko
import cmd
import time
import sys
import os
import subprocess
from subprocess import Popen,PIPE


from paramiko import SSHClient
host="172.17.85.250"
user="stack"
passs="salman"
client = SSHClient()
client.load_system_host_keys()
client.connect(hostname=host, username=user , password=passs)
stdin, stdout, stderr = client.exec_command('./demo-openrc.sh')
print ("stderr: ", stderr.readlines())
print ("pwd: ", stdout.readlines())

1 个答案:

答案 0 :(得分:0)

好,知道了。您必须使用模块subprocess并使用通信功能将用户输入传递给相应的功能。 subprocess.communicate会将用户输入发送到由子流程自身创建的子流程。检查下面的代码。代码的这种安全性是将输入“ Ajay”传递给test.sh脚本。这是一种逻辑,是尝试向您展示如何完成工作。

在您的情况下,在确实提供bash脚本的远程计算机上创建python脚本,然后从python脚本中将输入传递给bash脚本

test.sh

  

/ bin / bash

     

阅读-p“输入您的姓名:”用户名

     

回显“欢迎使用$用户名!”

Python脚本-用python3.7编写

  

导入子进程

     

process = subprocess.Popen(['bash','test.sh'],stdin = subprocess.PIPE,   stdout = subprocess.PIPE)

     

输出,错误= process.communicate(b'Ajay')

     

打印(输出)

输出

b'Welcome Ajay!\ n'