我创建了 Python GUI,它将命令列表作为输入并通过 Telnet 或 SSH 会话执行该列表。在打开 SSH 会话(在 Python 中使用 Paramiko)时,我在 for 循环中使用此代码在各种设备上运行命令:
stdin.write(command+"\n")
then = time.time()
timeout=10.0
while not stdout.channel.exit_status_ready():
if timeout is not None:
timeTest =time.time() - then
if timeout <= timeTest:
break
# Only print data if there is data to read in the channel
if stdout.channel.recv_ready():
# Write data from stdout
temp=str(stdout.channel.recv(1024))
print temp
if (temp.endswith(delim)) or (temp.endswith("# ")) :
print "successful exit"
break
该代码设计用于安装了 BusyBox 的调制解调器。因此,用户输入命令以打开busybox 并在BusyBox shell 中运行一系列命令是很常见的。正如您在这行代码“if (temp.endswith(delim)) 或 (temp.endswith("# "))”中所见,当检测到“ # "(这意味着命令已经完成输出)。
我遇到的问题是 BusyBox 没有将命令提示符打印到标准输出或调试行“print temp”中。为什么是这样?命令输出(例如 ls -l)成功打印到标准输出,但不是命令提示符或busybox介绍消息:当用户在这些调制解调器上输入busybox时,会打印介绍消息“BusyBox v1.17.2 (2014-10-02 10:50:35 PDT)内置外壳(ash)输入“帮助”以获取内置命令列表。” 这也不会打印到 STDOUT。这迫使代码利用在busybox中执行的每个命令的超时,这是不希望的,即它很慢,并且可能有命令输出花费的时间比所需的超时时间长,因此最好查找命令提示符。
这个问题是由于在 BusyBox 中实施了 ash 造成的吗?有没有办法接收命令提示符文本?