怎么用python控制另一个程序正在运行中_Python检查另一个Python应用程序是否正在运行...

我有两个应用程序(从python编译,仅在Windows上运行)。第一个是计划好的:它启动,启动另一个应用程序的几个实例,然后死亡。此外,此计划的应用程序应检查以前启动的子应用程序实例是否仍在运行。在

为了实现此检查,我尝试使用文件锁定方法:在子应用程序中创建文件并对其进行显式锁定。万一

应用程序崩溃锁应该自动释放。在

从中检查此文件

预定应用程序。如果它被锁定-这意味着子应用程序仍然

跑步。在

这在PERL中很容易实现,但我在python中遇到了一些问题。在

我尝试使用win32 API(从portalocker中剪切所需的部分代码)。在

以下是测试脚本:import os

import win32con

import win32file

import pywintypes

import sys

import time

import threading

def createLockFile(filePath = "c:\\\\test.tmp"):

file = open(filePath, "a+")

hfile = win32file._get_osfhandle(file.fileno())

win32file.LockFileEx(hfile, win32con.LOCKFILE_EXCLUSIVE_LOCK, 0, -0x10000, pywintypes.OVERLAPPED())

def lockFile(filePath = "c:\\\\test.tmp"):

t = threading.Thread(target=createLockFile, args=(filePath,))

t.start()

def checkFileLock(filePath = "c:\\\\test.tmp"):

log = open(filePath, "a+")

#here should be IOError: [Errno 13] in case of error

print 'File is not locked'

def go():

print 'start'

lockFile()

print 'file locked'

print 'sleeping'

time.sleep(30)

print 'getting up'

我打开pythonshell的两个实例并导入这个脚本。

然后我在其中一个文件中启动go()方法,当它处于休眠状态时,我启动checkFileLock()函数来检查文件是否确实被锁定。。。但事实并非如此。在

我也试图离开系统标准读入线就像在portalocker中完成的一样,在这种情况下,文件实际上是被锁定的。但是在我的应用程序中没有必要听stdin。。。在

所以我在创建锁的线程中创建了无限循环。在这种情况下,文件也被锁定,但即使在我关闭pythonshell之后也没有释放它,这也是不正确的。在

我将非常高兴听到如何解决在Windows中从Python锁定文件的问题。

如果你有任何其他的工作方法,如何确切地知道进程是否仍在运行,我也想听听。在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值