V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  keepwalk2020  ›  全部回复第 2 页 / 共 2 页
回复总数  31
1  2  
2020-11-20 20:28:06 +08:00
回复了 jackpot 创建的主题 Python 求助, Python 监控 windows 程序,崩溃后自启动
在策略组设置好之后.每隔开一段时间给所有运行的 pid 做一次 snapshot,然后把 pid 映射成 exe 程序名称,如果发现目标程序不在了,就启动目标程序,如果发现目标程序还在,就什么都不做,具体代码实现如下:这个程序是守护 VNC,记得换成你需要守护的程序名称,运行环境 python 2.7

# -*- coding: utf-8 -*-
#!/usr/bin/python

import os, sys, gc, time, ctypes, subprocess
from ctypes import byref, sizeof, windll, c_size_t, c_char, c_void_p, Structure, WinError#, POINTER
from ctypes.wintypes import DWORD, LONG

class PROCESSENTRY32(Structure):
_fields_ = [
('dwSize', DWORD),
('cntUsage', DWORD),
('th32ProcessID', DWORD),
('th32DefaultHeapID', c_size_t),
('th32ModuleID', DWORD),
('cntThreads', DWORD),
('th32ParentProcessID', DWORD),
('pcPriClassBase', LONG),
('dwFlags', DWORD),
('szExeFile', c_char * 260),
] #LPPROCESSENTRY32 = POINTER(PROCESSENTRY32)

def syspid_snapshot(dwFlags=2, th32ProcessID=0):
hSnapshot = ctypes.windll.kernel32.CreateToolhelp32Snapshot(dwFlags,th32ProcessID)
INVALID_HANDLE_VALUE = ctypes.wintypes.c_void_p(-1).value
if hSnapshot == INVALID_HANDLE_VALUE: raise ctypes.WinError()
return hSnapshot

def get_all_explr_pids():
all_pid=[]
pse = PROCESSENTRY32()
pse.dwSize = ctypes.sizeof(PROCESSENTRY32)
hSnapshot = syspid_snapshot()
pse_crt = ctypes.windll.kernel32.Process32First(hSnapshot, ctypes.byref(pse))
while pse_crt:
try :
hProcess = ctypes.windll.kernel32.OpenProcess(0x0410, 0, pse.th32ProcessID)
if hProcess:
buf = (ctypes.c_wchar * 1024)()
ctypes.windll.psapi.GetModuleFileNameExW(hProcess, 0, ctypes.pointer(buf), 1024+1)
buf = buf[:].encode('utf-8')
buf = buf[:buf.index("\0")]
if str(buf).split('\\')[-1].lower() == 'vncserver.exe': all_pid.append( str(pse.th32ProcessID) )
except : return (-1,)
pse_crt = ctypes.windll.kernel32.Process32Next(hSnapshot, ctypes.byref(pse))
ctypes.windll.Kernel32.CloseHandle(hProcess)
ctypes.windll.Kernel32.CloseHandle(hSnapshot)
return tuple(all_pid)

def protect_VNC():
sys.stdout.write('Daemon started with pid %d\n' % os.getpid())
sys.stdout.write('Daemon stdout output\n')
sys.stderr.write('Daemon stderr output\n')
vnc_exe_path = r"C:\\Program Files\\RealVNC\\VNC Server\\vncserver.exe"
c = 0
while True:
sys.stdout.write('%d: %s\n' %(c, time.ctime()))
sys.stdout.flush()
c = c+1
time.sleep(60*20) #check vnc pid each 20 minutes
#time.sleep(12) #check vnc pid each 20 minutes
try:
vnc_flg = get_all_explr_pids()
print(vnc_flg)
except :
continue
if len(vnc_flg) > 0:
if vnc_flg[0] != -1:
print('vnc is running\n\n')
else :
print('can not find vnc pid \n\n')
try:
subprocess.Popen(vnc_exe_path)
except:
pass
else :
print('can not find vnc pid \n\n')
try :
subprocess.Popen(vnc_exe_path, shell=True)
#ppp = os.popen( vnc_exe_path ).read()
except :
pass

if __name__ == '__main__':
protect_VNC()
2020-11-20 12:41:39 +08:00
回复了 keepwalk2020 创建的主题 分享创造 一个野生‧程序猿‧的‧三次元‧硬科幻作品
@oygh 谢谢提醒!已更正。
2020-11-19 18:43:40 +08:00
回复了 keepwalk2020 创建的主题 分享创造 用 kindle 写作?运行在 kindle 平台上的文本编辑器 N31_KTe
如果还把 kindle 当作压泡面神器,有点 out 了,以 pkw4 为分界线,之前老型号的 kindle 设备确实很慢,槽点很多,但现在 Kindle oasis2, oasis3 硬件反应速度已经很快了,越狱后可以当嵌入式开发系统的测试平台,兼看书。

有人吐槽手机和 ipad 完全可以代替 kindle,但不敢苟同,长时间阅读的话(连续超过 1 小时),别说手机屏幕,就算是电脑屏幕,眼睛也会很难受,超过一小时的连续阅读环境,电子墨水屏幕的优势就显示出来了
2020-11-19 18:32:03 +08:00
回复了 keepwalk2020 创建的主题 分享创造 用 kindle 写作?运行在 kindle 平台上的文本编辑器 N31_KTe
先查出 kindle 的 cpu 型号( Cortex-A7...),然后用 qemu 跑一个基于 debian 的 ARM 虚拟机,然后在虚拟机上开撸,编译打包,然后上传到 kindle 硬件上测试。
2020-11-19 10:08:32 +08:00
回复了 keepwalk2020 创建的主题 分享创造 用 kindle 写作?运行在 kindle 平台上的文本编辑器 N31_KTe
考虑过蓝牙键盘,但外接蓝牙键盘之后,要想码字舒服,额外需要一个巨大的硬件——桌子,另外蓝牙设备还会增加电量消耗(虽然新版本的蓝牙设备耗电已经很低了,但键盘本身也需要充电)
2020-11-19 10:04:17 +08:00
回复了 keepwalk2020 创建的主题 分享创造 用 kindle 写作?运行在 kindle 平台上的文本编辑器 N31_KTe
键盘和输入法都经过了优化,速度提高不少,特别是在 KO2 、KO3 上,码字速度和手机上没啥区别
2020-11-19 09:41:57 +08:00
回复了 keepwalk2020 创建的主题 分享创造 用 kindle 写作?运行在 kindle 平台上的文本编辑器 N31_KTe
就是因为 kindle 本身的输入法太佛系,才把屏幕键盘和拼音输入法重新整了一遍,拼音词库也优化了不少。
2020-11-18 08:04:10 +08:00
回复了 ztoben 创建的主题 Python Python in 操作在 tuple 和 list 中到底哪个快?
如果只是判断是否包含,用 set 肯定比 tuple 和 list 都快,
如果集合成员固定的话,用 frozenset 会更快一点,毕竟 frozenset 比 set 少调用了一次源码里的 set_clear_internal 函数。
2020-11-18 07:47:59 +08:00
回复了 keepwalk2020 创建的主题 Python 想知道现在还有多少人用 print 调试 debug?
繁华散尽,print 不改
2020-10-19 23:20:34 +08:00
回复了 tt7 创建的主题 科幻 《三体》的硬伤 ( by 布尔费墨)
奇怪就奇怪在,不管打仗还是合作,我们什么都没看见
2020-10-19 22:54:21 +08:00
回复了 reactor 创建的主题 分享创造 写了个 V2EX 看帖增强插件
这个不错,下了试下,
1  2  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1617 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 18ms · UTC 16:54 · PVG 00:54 · LAX 09:54 · JFK 12:54
Developed with CodeLauncher
♥ Do have faith in what you're doing.