这是我在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()'行。
如果有人遇到类似的问题或知道解决方案,请帮助我解决问题。
谢谢!
答案 0 :(得分:0)
使用\ n而不是\ r?
来终止字符串考虑使用telnetlib,而不是滚动你自己的w / subprocess?
最后,如果您可以在此主板上运行ssh服务器,您将能够使用paramiko和ssh频道,这将有助于避免一些令人头疼的问题。
答案 1 :(得分:0)
您可以使用Pexpect Library完成任务。
Pexpect可用于自动化交互式应用程序,如ssh,ftp,passwd,telnet等。它可用于自动化设置脚本,以便在不同服务器上复制软件包安装。