我正在处理一个脚本,该脚本接收一个包含IP地址的文本文件(每行一个),然后将每个IP传递给非Python程序命令。
结果是错误:
TypeError:在字符串格式化期间并非所有参数都已转换
import subprocess
list='c:\cmc_list.txt'
with open(list,'r') as cmc_list:
for i in cmc_list:
racadm_command = "racadm -r %s -u root -p calvin getslotname" % i
output = subprocess.Popen(racadm_command % i, stdout = subprocess.PIPE,
shell=True).communicate()[0]
print(racadm_command, output)
答案 0 :(得分:1)
传递给Popen命令的字符串已经被格式化,因此它没有%可以消耗i。删除“%i”,我想你会没事的。
答案 1 :(得分:0)
我相信您只打算进行一次格式化
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
,或从环境变量导入。此外,请勿打印出密码,请更改默认密码