AttributeError:“元组”对象没有属性“ format”

问题描述

我正在尝试在代码中插入变量以在远程Linux主机上运行命令,为此,我正在使用.format方法,请参见下面的代码

import paramiko
from datetime import datetime,timedelta

hostnames = [
   'hostname',]
username = 'username'
password = 'password'
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.load_system_host_keys()
ydate = datetime.strftime(datetime.Now() - timedelta(1),'%Y%m%d')

for host in hostnames:
   ssh.connect(host,username=username,password=password,look_for_keys=False)
   ssh.exec_command('cp test.txt {}.mrs_stats0.{}.pytest.gz ; chmod +r {}.mrs_stats0.{}s.gz').format(host,ydate,host,ydate)

尝试使用{}和.format时失败,出现以下错误

Traceback (most recent call last):
  File "C:/Users/IdeaProjects/main.py",line 25,in <module>
    ssh.exec_command('cp test.txt {}.mrs_stats0.{}.pytest.gz ; chmod +r {}.mrs_stats0.{}s.gz').format(host,test,test)
AttributeError: 'tuple' object has no attribute 'format'

我不明白为什么会收到此错误,此外,我已经进行了一些阅读以进一步理解元组,并且我不明白为什么我的变量没有被读取为字符串

解决方法

我想你希望最后一行是

ssh.exec_command('cp test.txt {}.mrs_stats0.{}.pytest.gz ; chmod +r {}.mrs_stats0.{}s.gz'.format(host,ydate,host,ydate))

只是放错位置的支架。在当前代码中,sshparamiko.SSHClient()实例,其方法exec_command()方法将执行命令的stdin,stdout和stderr作为三元组(link to docs