在ssh上执行远程命令时找不到文件错误(paramiko)

时间:2016-03-14 06:07:16

标签: python paramiko

我正在尝试使用pythhon和proxmoxer api创建一个vm。问题是,当我尝试运行qmrestore命令时,找不到操作系统映像,这实际上存在于该位置(挂载点)

import paramiko
from proxmoxer import ProxmoxAPI
import re
vmid=1000
image_name='Ubuntu14.04_DT64bit.tar\n'.strip()
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
target_host = 'x.x.x.x'
target_port = 22
target_port = 22
pwd = ':)'
un = 'root'
ssh.connect( hostname = target_host , username = un, password = pwd )
stdin, stdout, stderr = ssh.exec_command('cd //vmstore;ls')
for files in stdout:
    image=re.match(files.strip(),'Ubuntu14.04_DT64bit.tar',re.I)
    #print image_name
    if image:
        print "Image found"
        #mage_name=image
        break
    else:
        flag=0
print "Inn try"
print image_name
command=r'qmrestore '+image_name + " " + '11111'
stdin, stdout, stderr = ssh.exec_command(command)
print stdout.readlines()
print stderr.readlines()

输出:

print stdout.readlines()
[]
stderr.readlines()
[u"can't find file 'Ubuntu14.04_DT64bit.tar'\n"]

1 个答案:

答案 0 :(得分:0)

Paramiko的exec_command创建一个频道并执行远程shell来运行其命令。命令完成后,远程shell和通道将关闭。这具有以下优点:命令响应由闭合通道界定,并且任何给定命令独立于可能正在其他通道上进行的其他命令。但这也意味着一个命令中的任何环境变化都不会持续存在。在这种情况下,您必须更改所有命令的目录,而不仅仅是第一个。