在执行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'))