./rancli -c -
我在具有此文档的外壳中输入了一个命令:
从 Linux shell 运行该工具允许附加选项,具体取决于为命令提供的选项。选项如下:
-h 显示有关命令的帮助
-c 命令不是从用户交互地获取键入的命令,而是从指定的文件中读取,即以批处理模式。处理完所有命令后,CLI 会话将自动结束。
-c - 同上,但从 Linux 标准输入读取命令。这允许将命令“传送”到程序。
我想把它转换成python。如果我使用第二个选项,一切正常,它会从文件中读取命令并在屏幕上显示结果。但是我想使用写入标准输入的第三个选项。我原以为这条线会运行一个命令./rancli -c - commandHere
,但事实并非如此。我要做的是输入./rancli -c -
,然后我可以在下一行手动写入标准输入,比如这里我使用命令read hnb
:
[root@switch]# ./rancli -c -
read hnb
RAN> read hnb
HNBId Location RegUEs ActUEs
000295-0000038828@ipaccess.com n/c
000295-0000070688@ipaccess.com n/c
当我在 shell 中输入它时,我得到的结果打印得很好。但是,当我在我的 python 中执行此操作时,我没有将结果正确打印回给我。这是我尝试过的:
ran_opt_get_ap = "read hnb\n"
cmd_rancli = ["/jffs2/usbflash0/ran/rancli", "-c", "-"]
proc = subprocess.Popen(cmd_rancli + [ran_opt_get_ap], stdout=subprocess.PIPE)
for line in iter(proc.stdout.readline, ''):
print line,
proc.wait()
因此,当我传入这样的命令时,它显然不像在 shell 中那样工作并且被忽略。现在这里有两个问题,我如何在这里将命令写入标准输入,因为我必须read hnb
手动输入以下命令?在我运行rancli -c -
之后,我想在之后注入命令,我现在必须像这样输入它:
read hnb
RAN> read hnb
另一个问题是我的代码没有打印出上面的完整结果,但是当我输入下一个命令时,我会得到其余的结果和下一个结果的第一行,依此类推,在我输入后得到结果下一个命令:
get ap
HNBId Location RegUEs ActUEs
000295-0000038828@ipaccess.com n/c
000295-0000070688@ipaccess.com n/c
RAN> get ap
更新:最新代码有效
cmd_rancli = ["/jffs2/usbflash0/ran/rancli", "-c", "-"]
ran_opt_get_ap = "read hnb"
proc = subprocess.Popen(cmd_rancli, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
output = proc.communicate(ran_opt_get_ap)[0]
print output