subprocess及paramiko处理shell命令行交互的方法

在执行shell文件时有时候会遇到shell中包含read方法以供用户进行输入。
使用Python在运行这种shell时,本地shell可以使用subprocess.run中的input参数进行输入,示例如下:

import subprocess
cmd = "sh -c 'read v; sleep 1; echo $v'"
# 通过input参数指定要输入的字符串, bytes类型 
p = subprocess.run(cmd, stdout=subprocess.PIPE, input=b'hello,world\n', shell=True)   
print(p.stdout.decode('utf-8'))

远程主机shell可以通过paramiko执行命令exec_command返回的stdin的stdin.channel.send来进行输入,示例如下:

import paramiko

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname='******', port=22, username='root', password='******')
cmd = "sh -c 'read v; sleep 1; echo $v'"
stdin, stdout, stderr = ssh.exec_command(cmd)
stdin.channel.send(b'hello,world\n')  # 输入字符串,bytes类型
stdin.channel.shutdown_write()  # 结束输入
print(stdout.read().decode('utf-8'))
上一篇:【PSU】AIX 11g RAC自动打GI PSU5


下一篇:windows shell