在子进程调用中进行字符串替换
我该如何在Python中正确执行这个Unix命令,并把给定的值 index, username, password
替换到命令里呢?
abc.py
import subprocess,datetime
cmd = '\./splunk search "| dbinspect index=%s |timeformat= "%s" rename state as category | stats min(earliestTime) as earliestTime max(latestTime) as latestTime sum(sizeOnDiskMB) as MB by category " -auth %s:%s | grep -v "category" | grep -v "-"' %(index, username, password)
subprocess.call(cmd, shell = True)
当我尝试执行这个命令时,出现了错误:
TypeError: not enough arguments for format string
2 个回答
0
你看到的错误信息其实很清楚:你有四个 %s
代表你的字符串,但你提供的元组里只有三个值。是不是忘记了 timeformat
的值呢?
如果你需要重复使用同一个参数,可以用另一种字符串格式化的方法,比如用 'some text and {0}'.format(my_string)
:
cmd = '\./splunk search "| dbinspect index={0} |timeformat= "{1}" rename state as category | stats min(earliestTime) as earliestTime max(latestTime) as latestTime sum(sizeOnDiskMB) as MB by category " -auth {2}:{3} | grep -v "category" | grep -v "-"'.format(index, timeformat, username, password)
0
你在这个字符串里有四个"%s"的格式符号,但在(index, username, password)
这个元组里只有三个元素。