在我的下面的程序中,输出被重定向到文件test1.txt,但是当我打开文件时,我有三个问题:
我基本上希望它与另一个文件进行比较,因此如果选项卡的数量不同,它将会失败。
telconn=pexpect.spawn('telnet 10.24.12.109')
telconn.logfile = sys.stdout
telconn.expect(":")
telconn.send("user" + "\r")
telconn.expect(":")
telconn.send("pass" + "\r\r\r\r\n\n\n")
telconn.expect("key to proceed.")
telconn.send ("\003")
telconn.expect("root>")
prev_std= sys.stdout
sys.stdout=open("test1.txt","w")
print "Telnet connection is done"
telconn.sendline('\n');
telconn.expect (['>',pexpect.EOF])
ls = telconn.before
telconn.sendline('ls -al');
telconn.expect (['>',pexpect.EOF])
ls = telconn.before
telconn.sendline('pwd');
telconn.expect (['>',pexpect.EOF])
pwd = telconn.before
telconn.sendline('noscli');
telconn.expect (['#',pexpect.EOF])
nos = telconn.before
telconn.sendline('terminal length 0');
telconn.expect (['#',pexpect.EOF])
term = telconn.before
telconn.sendline('\n\n');
telconn .sendline('exit');
telconn.close()
print ls
print pwd
print nos
print term
#print "Ended session"
sys.stdout.close()
sys.stdout =prev_std
fo = open("test1.txt", "r+")
str = fo.read();
print "Read String is : ", str
# Close opend file
fo.close()
示例输出如下所示
Telnet connection is done
^M
sw0:FID128:root
ls -al^M
total 32^M
pwddrwx------ 3 root root 4096 Feb 2 11:07 ./^M
^M
drwxr-xr-x 28 root root 4096 Feb 3 05:58 ../^M
-rw-r--r-- 1 root sys 507 Feb 1 06:47 .bash_logout^M
-rw-r--r-- 1 root sys 27 Feb 1 06:47 .inputrc^M
-rw-r--r-- 1 root sys 1220 Feb 1 06:47 .profile^M
-rw-r--r-- 1 root sys 2551 Feb 1 06:47 .rhosts^M
drwxr-xr-x 2 root sys 4096 Feb 1 09:51 .ssh/^M
-rw-r--r-- 1 root sys 617 Feb 1 06:47 .toprc^M
-rw-r--r-- 1 root root 0 Feb 3 06:01 mcast_trc^M
-rw-r--r-- 1 root root 0 Feb 3 06:01 sysdiag_trc^M
sw0:FID128:root
pwd^M
/root^M
答案 0 :(得分:0)
我看到像ls,pwd这样的命令在提示符
下面
您的输出的换行符不一致(^M
为CR
)。这意味着您的整体的某些部分输出CR+LF
,其他部分 - 仅LF
。很难分辨出哪一个来自单一输出。将它们分开并亲自看看。
提示符应显示" sw0:FID128:root>"但它表明 " SW0:FID128:根"
可能的原因:
stderr
。
2>&1
或等效或以其他方式看到两个输出isatty()
函数来区分它们。理由通常是更好地适应人类或机器阅读的输出。许多这样的程序都有明确指定输出风格的开关。
| cat
(用于输出重定向)或cat <command_file> |
(用于输入重定向)来检查是否是这种情况使用telnet
,它可以是。 >
是一个命令提示符。它通常打印到stderr
。它可以在那里打印,或者在有重定向时根本不打印。
如果实际输出有2个标签,则文件只显示1个标签。
可能与2)相同。也许输出经历的东西也会进行标签转换。