python字符串格式错误

python字符串格式错误,python,python-3.x,Python,Python 3.x,我正在编写一个脚本,它获取一个包含IP地址的文本文件(每行一个),然后将每个IP传递到一个非Python程序命令中 结果是一个错误: TypeError:在字符串格式化过程中并非所有参数都已转换 传递给Popen命令的字符串已经格式化,因此它没有%剩余来使用i。去掉“%i”,我想你会没事的。我相信你只打算格式化一次 import subprocess cmc_list='c:\cmc_list.txt' racadm_command_template = "racadm -r {} -u ro

我正在编写一个脚本,它获取一个包含IP地址的文本文件(每行一个),然后将每个IP传递到一个非Python程序命令中

结果是一个错误:

TypeError:在字符串格式化过程中并非所有参数都已转换


传递给Popen命令的字符串已经格式化,因此它没有%剩余来使用i。去掉“%i”,我想你会没事的。

我相信你只打算格式化一次

import subprocess
cmc_list='c:\cmc_list.txt'

racadm_command_template = "racadm -r {} -u root -p calvin getslotname"

with open(cmc_list,'r') as f:
    for ip in f:
        cmd = racadm_command_template.format(ip)
        output = subprocess.Popen(cmd, stdout = subprocess.PIPE, shell=True).communicate()

        print(cmd, output[0])

我还建议使用
getpass
作为密码提示,或者从环境变量导入。此外,不要打印密码,请更改默认密码

欢迎使用SO!请确保发布正确缩进的代码,特别是对于缩进很重要的
python
问题。文本文件中的值是什么?该文件在过去是否正常运行?从那以后有没有编辑过?racadm_命令%i应该做什么还没有做?我是@cricket_007的。我认为在
racadm\u命令
之后不需要额外的
%I
。顺便说一下,您应该避免将变量命名为
list
或任何其他Python数据类型谢谢。从Popen中删除%i允许脚本运行。谢谢。您的脚本版本已成功运行。这是我的第一个python脚本。这纯粹是教育,所以密码处理不是一个优先事项,但我真的很感激这个提示。我假设您熟悉这里的目标,因为您知道默认密码。我很好奇您选择用f替换cmc_列表,用ip替换I;还将[0]从输出定义移动到打印功能。为什么选择这些选项?请进一步检查。对于列表中的每个IP(最后一个除外),它会提前执行命令;所以,除了列表中的最后一个IP之外,所有IP上应该是“racadm-r%s-u root-p calvin getslotname”的内容最终都是“racadm-r%s”。思想?
i
通常用作数字迭代器,而不是文件中的行,而
f
是“文件对象”。否则变量名就不太重要了,但是
list
是一种内置的Python类型,因此如果不是这样,您就无法使用
list()
函数。我移动了[0],以便您也可以访问输出的其他值(如果需要)。关于最后一行,我这里没有使用%s,但我认为不应该出现这种情况。请参见上文。请发布新问题,而不是编辑您已经接受的问题。
import subprocess
cmc_list='c:\cmc_list.txt'

racadm_command_template = "racadm -r {} -u root -p calvin getslotname"

with open(cmc_list,'r') as f:
    for ip in f:
        cmd = racadm_command_template.format(ip)
        output = subprocess.Popen(cmd, stdout = subprocess.PIPE, shell=True).communicate()

        print(cmd, output[0])