【发布时间】:2015-06-03 23:28:17
【问题描述】:
我想知道如何在当前 python 脚本已经运行时停止它。
为了清楚起见,我想用我自己的 python 脚本编写它。所以第一件事,在 main 方法中,它会检查我的 python 脚本是否已经在运行。如果它正在运行,我想退出并显示错误消息。
目前我正在尝试这段代码:
if os.system("ps ax | grep sample_python.py") == True:
print "fail"
exit(0)
else:
print "pass"
上面的代码看起来像是在 grepping python 名称.. 但它总是进入 else 循环而不是进入 if 循环并退出..
因此,出于测试目的,我运行我的脚本并在另一个终端上再次运行我的脚本。第一个脚本不会停止,但第二个 python 不会进入 if 循环以打印出错误消息。
我该如何解决这个问题?
好吧,我发现了一个愚蠢的东西,我想看看是否有人可以帮助我解决它.. 所以我的意思是如果另一个python正在运行,就杀死刚刚启动的python.. 但愚蠢的是..因为我正在运行我的python并在这个python内部运行一个检查编码..它总是会退出..因为一旦我启动python PID就会被创建并运行......
所以.. python 启动-> pid 创建并运行-> 检查 python 是否正在运行-> 是 python 正在运行-> 退出。
我想看看有没有办法 python 启动 -> 检查 python 是否已经在运行 -> 如果它正在运行,杀死当前的 python 而不是正在运行的那个。
【问题讨论】:
-
如果找不到匹配项,grep 会找到自己
-
诊断您出现的问题的方法是首先在命令行中输入
ps ax ...,无论是在您的脚本运行时还是在不检查您是否有正确的命令行时。然后你编写一个 python 脚本,它只打印os.system( ...调用的结果,在这两种情况下再次检查是否存在差异。然后你应该可以编写你需要的脚本了。 -
您可以使用
pgrep和pkill来查找和终止进程,而不包括 grep 进程本身(还有各种 shell 实用程序可以确保只有一个副本正在运行,尽管它们可能不会适合您的情况) -
我认为它也可能失败,因为当我执行
ps | grep progname时,列出的进程之一是 grep 命令。并且包含了 grep 的命令行参数“progname”。这可能取决于操作系统。