C/C++教程

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

本文主要是介绍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'))
这篇关于subprocess及paramiko处理shell命令行交互的方法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!