python sendline_python – 从pexpect sendline读取输出

我有pexpect工作,但我在从它打印输出时遇到问题.在我下面的测试脚本中,它创建ssh连接,然后发送sudo su – ,然后发送我的密码,然后发送一行需要sudo访问权限(我还添加了几次p.interact()确保它在根).我遇到的问题是返回我运行的命令的输出.最后,我想运行一些顶级命令,以及一些du -h和其他(更复杂的)空间命令.但是目前当它试图打印p.before时,我得到:

Traceback (most recent call last):

File "./ssh.py", line 37, in

print p.before()

TypeError: 'str' object is not callable

这是我正在处理的脚本(编辑删除我的通行证等)

#!/usr/bin/env python

import pexpect

import struct, fcntl, os, sys, signal

def sigwinch_passthrough (sig, data):

# Check for buggy platforms (see pexpect.setwinsize()).

if 'TIOCGWINSZ' in dir(termios):

TIOCGWINSZ = termios.TIOCGWINSZ

else:

TIOCGWINSZ = 1074295912 # assume

s = struct.pack ("HHHH", 0, 0, 0, 0)

a = struct.unpack ('HHHH', fcntl.ioctl(sys.stdout.fileno(), TIOCGWINSZ , s))

global global_pexpect_instance

global_pexpect_instance.setwinsize(a[0],a[1])

ssh_newkey = 'Are you sure you want to continue connecting'

p=pexpect.spawn('ssh user@localhost')

i=p.expect([ssh_newkey,'password:',pexpect.EOF,pexpect.TIMEOUT],1)

if i==0:

print "I say yes"

p.sendline('yes')

i=p.expect([ssh_newkey,'password:',pexpect.EOF])

if i==1:

print "I give password",

p.sendline("mypassword")

elif i==2:

print "I either got key or connection timeout"

pass

elif i==3: #timeout

pass

global global_pexpect_instance

global_pexpect_instance = p

p.sendline("sudo su -")

p.sendline("mypasswd")

p.sendline("mkdir /home/user/test")

print p.before

任何帮助深表感谢.

编辑:正如Armin Rigo在下面指出的那样.我打电话给p.before作为像p.before()这样的函数.我这个愚蠢的错误,因为这解释了为什么我今天得到这个错误,而不是昨天我尝试这个时.在对我的脚本进行更改并修改正在发送的命令后,打印p.before,并且不返回任何输出.从sendline()命令返回输出的任何其他方法?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值