使用Subprocess和Communicate在Telnet连接上执行命令

时间:2014-11-13 10:47:20

标签: python subprocess telnet

这是我在StackExchange上的第一个查询。如果我的问题已经提出并得到回答,那么请原谅。如果是这样,请指点我。

查询: 我正在尝试建立到板的telnet连接,然后想在此之后运行应用程序。我想在整个过程中捕获STDOUT和STDERR。以下是我的代码片段

代码段:

import subprocess
import time

#1. Establish the subprocess 
commandlist = ["telnet"] + ["10.11.12.13"]
p = subprocess.Popen(commandlist,
                     stdin = subprocess.PIPE,
                     stdout = subprocess.PIPE,
                      stderr = subprocess.PIPE)
#2. Give the login name. There is no password
p.stdin.write("root\r")
#3. Adding this for sync to avoid any overlap
time.sleep(1)
#4. Invoke the communicate to execute the application from a specied path on 10.11.12.13 system
stdout, stderr = p.communicate('sh /mnt/path/app\r')

在步骤(4),我尝试打印stdout和stderr的值,以查看应用程序“app”是否已运行。不幸的是,它甚至没有执行'p.communicate()'行。

如果有人遇到类似的问题或知道解决方案,请帮助我解决问题。

谢谢!

2 个答案:

答案 0 :(得分:0)

使用\ n而不是\ r?

来终止字符串

考虑使用telnetlib,而不是滚动你自己的w / subprocess?

最后,如果您可以在此主板上运行ssh服务器,您将能够使用paramiko和ssh频道,这将有助于避免一些令人头疼的问题。

答案 1 :(得分:0)

您可以使用Pexpect Library完成任务。

Pexpect可用于自动化交互式应用程序,如ssh,ftp,passwd,telnet等。它可用于自动化设置脚本,以便在不同服务器上复制软件包安装。

https://pexpect.readthedocs.io/en/stable/