我想要一个Python脚本来grep
,提取它的PID,然后杀死它。我用的是:
def main():
# Shutdown Tomcat
shutdownCmd = "sh ${TOMCAT_HOME}/bin/shutdown.sh"
subprocess.call([shutdownCmd], shell=True)
# Check for PID
grepCmd = "ps -aef | grep tomcat"
grepResults = subprocess.check_output([grepCmd], shell=True)
# Get PID(s) and kill it/them.
for i in range(1, len(grepResults), 9):
pid = grepResults[i]
killPidCmd = "kill -9 " + pid
subprocess.call([killPidCmd], shell=True)
# Exit.
sys.exit()
然而,尽管它确实关闭了我的进程(Apache Tomcat),但每当我运行它时,终端中都会出现以下“警告”:
^{pr2}$任何Python度量都可以查看脚本并找出为什么我会得到这些/bin/sh: 1: kill: Illegal number: <whatever>
警告/错误/输出?关于如何修复它们有什么建议吗?提前谢谢!在
问题是,当grep输出实际上是一个字符串时,您将grep输出视为一个列表。。换线:
收件人:
^{pr2}$……再看看输出,问题就清楚了。在
{1{shell}中很少使用{1}的问题,这会导致shell中很少使用^的问题
我再次建议您将
killPidCmd = ["kill", "-9", pid]
更改为killPidCmd = ["echo", "kill", "-9", pid]
,以验证一切工作正常也就是说,这将比shell脚本简单得多:
您可以尝试使用
./script.py 2>/dev/null
将stderr
重定向到/dev/null
,以删除这些消息。在看起来你的grepResults是一个普通的字符串,你从中挑选了一个字符。这就是为什么
^{pr2}$kill
抱怨你给它的奇怪的数字(不是数字而是字符)。检查此命令的输出,然后您应该看到,出了什么问题:插入类似的内容并检查
pid
是否适合您。还要确保标准(if 'grep' in line
)适合其他进程,而不匹配其他进程。也许你得在这里加上更多的if子句。在如果
pid
是None
,它应该退出并出错,因为没有找到正在运行的服务。如果您想杀死多个pid
,当然您必须创建一些列表,或者在这个循环中直接杀死pid。在相关问题 更多 >
编程相关推荐