【发布时间】:2018-04-06 21:52:25
【问题描述】:
我工作的公司使用过时的信息系统(版权所有 1991-2001)。该系统是一台运行 ssh 服务器的 Centos 机器。无法以任何方式访问后端或其数据。所有数据都需要通过文本报告检索,或通过手动按键输入。这是您登录时看到的example。
我正在尝试编写一个 python 脚本,该脚本将模拟击键以运行报告和执行琐碎的任务。我已经使用 Windows 上的 .cmd 文件成功完成了这项工作,该文件连接并模拟了击键。问题是有些进程具有不可预测的分支(有时会弹出一条消息并要求提供一些信息或按键以验证您是否看到了一条消息)。我可以预测分支可能发生的位置,但无法检测它是否真的存在,因为我的 .cmd 文件对 ssh 会话的输出是盲目的。 (顺便说一下,我在 windows 下工作)
我想做的是使用一个 python 脚本,它使用标准输入并根据它看到的内容做出决定,但我对管道的工作方式不熟悉。插入我的脚本有效,但我不确定如何将击键从 python 脚本发送回 ssh 会话。这是我的测试脚本的一个示例:
import sys
import time
buff=''
try:
while True:
buff += sys.stdin.read(1)
if buff[-5:] == 'press':
print('found word "press"!')
#Send a keystroke back to the ssh session here
buff = ''
except KeyboardInterrupt:
sys.stdout.flush
pass
我是这样称呼它的:
ssh MyUsername@###.###.###.### | python -u pipe_test.py
当它运行时,我什么都看不到,但我已经验证我可以使用我的常规键盘通过终端发送击键。
关于如何将击键输出到 ssh 会话的任何想法? 我应该做一些完全不同、更简单的事情吗?
仅供参考:服务器发送到终端的数据有 ASCII 转义字符到处乱飞。这不是一个很好的 bash 界面或类似的东西。此外,我还安装了一堆 Unix 命令行工具,例如,我可以从 windows 进行 ssh。
tl;dr 如何从 ssh 会话通过管道传输到 python,并从同一个 python 脚本将击键发送回 ssh 会话?
【问题讨论】:
-
这可能值得研究pexpect。您将从 Python 生成 ssh 进程,而不是通过管道传输标准输入/输出。
-
哇,谢谢。我今天才刚刚开始研究这个,但看起来它会起作用!一旦我得到一些工作,我会用一个示例脚本来回答这个问题
标签: python windows pipe pipeline