在子进程调用中进行字符串替换

0 投票
2 回答
1185 浏览
提问于 2025-04-17 20:21

我该如何在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)这个元组里只有三个元素。

撰写回答