是否有Pythonic方法只运行一个程序实例?
我提出的唯一合理的解决方案是尝试在某个端口上将其作为服务器运行,然后第二个程序尝试绑定到同一个端口 - 失败.但这不是一个好主意,也许有比这更轻巧的东西?
(考虑到程序有时会失败,即段错误 - 所以像"锁定文件"这样的东西不起作用)
更新:提供的解决方案比仅存在一个不存在的服务器的端口要复杂得多且不太依赖,所以我必须使用那个.
我正在尝试创建一个只有用户可读和可写(0600)的文件.
这是通过以下方式使用的唯一方法os.open()吗?
import os
fd = os.open('/path/to/file', os.O_WRONLY, 0o600)
myFileObject = os.fdopen(fd)
myFileObject.write(...)
myFileObject.close()
Run Code Online (Sandbox Code Playgroud)
理想情况下,我希望能够使用with关键字,以便我可以自动关闭对象.有没有更好的方法来做我上面做的事情?
我想在Django服务器启动时执行一些代码,但我希望它只运行一次.目前,当我启动服务器时,它执行了两次.文档说这可能发生,并且:
您应该在AppConfig类上放置一个标志,以防止重新运行应该执行一次的代码.
知道怎么做到这一点?下面的打印声明仍然执行两次.
from django.apps import AppConfig
import app.mqtt
from apscheduler.schedulers.background import BackgroundScheduler
class MyAppConfig(AppConfig):
name = 'app'
verbose_name = "HomeIoT"
run_already = False
def ready(self):
if MyAppConfig.run_already: return
MyAppConfig.run_already = True
print("Hello")
Run Code Online (Sandbox Code Playgroud) 我需要找到一种正确的方法来阻止我的(Python)程序的两个运行实例.我目前正在使用以下方法.
在Windows上,
os.popen('wmic process get caption,processid | findstr `programname.exe`')
Run Code Online (Sandbox Code Playgroud)
在Linux上,
os.popen('ps x | grep `programname`')
Run Code Online (Sandbox Code Playgroud)
它似乎现在工作正常.这种方法是否正确?有人可以向我建议一个更好的方法吗?
编辑:感谢回复家伙,上述方法有什么问题吗?我尝试了linux的pid文件方式.如果pid文件以某种方式被删除怎么办?
我有一个带有方法的shell脚本:
start(){
echo "Hello world"
}
stop(){
ps -ef|grep script.sh|grep -v grep|xargs kill
}
while [ "$1" != "" ]; do
case "$1" in
start)
start
;;
stop)
stop
;;
*)
echo $"Usage: $0 {start|stop}"
exit 1
esac
shift
done
Run Code Online (Sandbox Code Playgroud)
我正在使用以下命令运行此脚本:./script.sh start调用 start 方法。现在,我想检查此进程是否已在运行,如果已在运行则退出。我在网上尝试了一些解决方案,但没有任何效果。有人请帮忙。我尝试过的解决方案是:
if [ -f /var/tmp/script.lock ]; then
echo "Already running. Exiting."
exit 1
else
touch /var/tmp/script.lock
fi
<main script code>
#some code
rm /var/tmp/script.lock
Run Code Online (Sandbox Code Playgroud)
另一种是:
PID=$(ps -ef | grep script.sh|grep -v grep)
if [ -z …Run Code Online (Sandbox Code Playgroud) 我想知道如何在已经运行的时候停止当前的python脚本.
要清楚,我想用我自己的python脚本编写它.所以首先,在main方法中,它将检查我的python脚本是否已经运行.如果它正在运行,我想退出并显示错误消息.
目前我正在尝试此代码:
if os.system("ps ax | grep sample_python.py") == True:
print "fail"
exit(0)
else:
print "pass"
Run Code Online (Sandbox Code Playgroud)
上面的代码看起来像是grepping python名称..但它总是转到else循环而不是进入if循环并退出..
因此,出于测试目的,我运行我的脚本,并在另一个终端上再次运行我的脚本.第一个脚本不会停止,但第二个python不会进入if循环打印出错误消息.
我怎样才能解决这个问题?
好吧,我发现了一个愚蠢的事情,我想看看是否有人可以帮助我绕过它..所以我的观点是杀死刚开始的python,如果另一个python正在运行..但是愚蠢的事情是..因为我我正在运行我的python并在这个python中运行一个检查编码..它将一直退出..因为我一启动python PID将被创建并将运行...
所以.. python启动 - > pid创建并运行 - >检查python是否正在运行 - >是的python正在运行 - >退出.
我想看看是否有办法进行python启动 - >检查python是否已经运行 - >如果正在运行则杀死当前的python而不是正在运行的python.