在pexpect脚本中使用scp时出错

2024-05-28 23:21:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试建立一个从xml文件读取数据并复制备份文件的备份收费 xml文件包含所有设备数据,如下所示:

<data>
    <devices>
        <device name='cisco' ip='10.10.10.10' uname='username' password='passpass' backup_make='Write memory' backup_location_device='nvram:/startup-config' backup_location='idan/backup_fiels/backup1.cfg' ></device>     
        </devices>
</data> 

我用ssh连接数据,这样很好:

^{pr2}$

但是当我对scp做同样的操作时,我得到了一个错误

backup = ('scp ',devicelist[0].attributes['uname'].value,'@',devicelist[0].attributes['ip'].value,':',devicelist[0].attributes['backup_location_device'].value,' test.cfg')

ssh_device = pexpect.spawn(backup)
ssh_device.expect('.assword:')
.
.
.

当我运行脚本时:

Traceback (most recent call last):
  File "xmltest.py", line 34, in <module>
    backup_make = pexpect.spawn(backup)
  File "/usr/local/lib/python2.7/site-packages/pexpect/__init__.py", line 485, in __init__
    self._spawn(command, args)
  File "/usr/local/lib/python2.7/site-packages/pexpect/__init__.py", line 590, in _spawn
    'executable: %s.' % self.command)
pexpect.ExceptionPexpect: The command was not found or was not executable: scp Netadmn9@10.10.10.10:nvram:/startup-config test.cfg.

floowing命令也在工作:

backup = ('scp Netadmn9@10.106.11.111:nvram:/startup-config HSBU1a1_idan.cfg')

ssh_device = pexpect.spawn(backup)
ssh_device.expect('.assword:')
.
.
.

有人能帮忙吗? 谢谢!在


Tags: configvaluedevicelocationcfgsshbackupattributes
1条回答
网友
1楼 · 发布于 2024-05-28 23:21:19

Pexpect需要一个命令,然后是一个参数列表,因此需要分解它。在

尝试:

backup = "scp %s@%s:%s test.cfg" % (devicelist[0].attributes['uname'].value,devicelist[0].attributes['ip'].value,devicelist[0].attributes['backup_location_device'].value)

split_command = shlex.split(backup)
ssh_device = pexpect.spawn(split_command)

另一方面,如果设置了公钥-私钥登录,则不需要pexpect来执行备份,可以使用subprocess调用。在

here。在

^{pr2}$

我添加了一个字符串格式的行,而不是您生成的元组。在

这应该是明智的划分shlex.分离()

相关问题 更多 >

    热门问题