V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  keepwalk2020  ›  全部回复第 1 页 / 共 2 页
回复总数  30
1  2  
84 天前
回复了 feirisu 创建的主题 程序员 Windows 下开发小应用 GUI,真的很难选方案
如果选 python + tkinter 的话,有图形化 UI 生成工具,
https://visualtk.com/
https://github.com/alejandroautalan/pygubu-designer
设计好 UI ,直接生成相关代码

如果只在 win 平台用,打包时候+upx 压缩,体积更小 : https://github.com/upx/upx/releases/tag/v4.2.2
如果没有调用很大很复杂的库,python + tkinter + win32 API + pyinstaller + upx 写的 GUI 应用可以 < 10Mb, 手动优化( trim 库)可以 < 5Mb

同样的代码,所使用的 python 版本不同会导致不同的打包大小
py2.7 < py3.5 < py3.12
帖子里的下载连接已经失效,这里有新的下载连接
https://zhuanlan.zhihu.com/p/601340609
84 天前
回复了 feirisu 创建的主题 程序员 Windows 下开发小应用 GUI,真的很难选方案
python + tkinter + win32API 然后用 pyinstaller 打包, 需要加密的话用+ cython
python + tkinter 写的应用优化打包后可以小于 10Mb
python + ctypes 调用 win32 DLL ,打包后小于 3Mb
不要用用 python + qt
这有一个用 python + ctypes 写的多窗口文件管理器,仅供参考:
https://www.v2ex.com/t/911130#reply9
90 天前
回复了 shuiguomayi 创建的主题 Linux manjaro 滚挂之后排查问题的线索?
如果只是正常滚挂,还可以进命令行的话,99%是因为显卡驱动,对应方法
1 ,ctrl + shif + F3 进命令行,并登录, 如果开机就是命令行,忽略此步
2 ,停 GDM 服务 sudo systemctl stop lightdm (要停的服务也可能是 gdm 或别的,取决于你装的是哪种桌面)
3 ,用 wget 去官网下最新的 nvidia linux 驱动 :NVxxxxxx.run (也可以在别的电脑上下好驱动 copy 过来)
4 ,sudo chmod +x Nvxxxxxx.run
5, 安装驱动 sudo ./Nvxxxxxxxx.run
重启

如果是自己删了不应该删的库,那得找个高人才能恢复,费时费力,自己能做的就是用 manjaro'启动盘引导系统,插外接硬盘,把 home 下需要的文件备份到外接硬盘上,重装系统
根据上面几位老哥给的意见,目前能看到的坑有:
1 显卡直通后,多台虚拟机之间切换,可能需要重启宿主机,宿主机本身除了调度虚拟机,几乎不能干别的了
2 需要第二个显示器
3 可能需要两套鼠标键盘
4 硬件分组配置复杂
@jim9606 不是把一张显卡掰开给多个虚拟机,是把一张显卡在不同时间段共享给多个虚拟机,不会同时打开多个虚拟机,同一时间只有一台虚拟机在运行
@lingeo 搜了下,macos 现在也可以用 N 卡直通了,以前不行
@nullico 谢谢贴出硬件配置列表,我这因为不会同时打开多个虚拟机,打算用尽量少的显卡直通给虚拟机
@photon006 谢谢解答,在考虑用 PVE 方案,需要先测试下,一顿折腾跑不了...
@yulgang 谢谢解答,宿主机就是台笔记本,打算把笔记本的 intel 集成显卡用于宿主机的显示
@haohunhun 搜了下,PVE 好像无 GUI ,只能通过网页控制,如果在宿主机上装 PVE ,宿主机不就基本废了? 啥也干不了,连网页都不能看了...
@billccn 谢谢提醒,这确实是个坑,刚才在看显卡直通的教程, 里面提到 iommu group 分组,查关联的硬件 id ,一头雾水...
@yulgang 打算外接一个显示器,通过 HDMI 接口在外接显示器上显示虚拟机的画面,宿主机器的画面用集成显卡在笔记本的屏幕上显示,不知能否实现?查了几个显卡直通的帖子,说好像需要两套键盘鼠标,需要在宿主机和虚拟机之间切换键盘鼠标,这个好像优点烦 ...
335 天前
回复了 mikewang 创建的主题 Windows Windows 11 的任务管理器一言难尽
咖喱 CEO 一上任就裁撤了 90%的测试岗位,强制系统自动在用户电脑上更新,让用户来测试,你就是测试员
Python 写的资源管理器。。。
2021-01-21 22:18:32 +08:00
回复了 keepwalk2020 创建的主题 程序员 请教下, ffmpeg 可以用到商业软件里面吗?
@xupefei 谢谢,用 LGPL 版!
2021-01-21 22:17:26 +08:00
回复了 keepwalk2020 创建的主题 程序员 请教下, ffmpeg 可以用到商业软件里面吗?
@imgbed 年轻人得讲武德呀!
2021-01-21 22:16:36 +08:00
回复了 keepwalk2020 创建的主题 程序员 请教下, ffmpeg 可以用到商业软件里面吗?
@kneep 谢谢!
2020-11-23 09:48:26 +08:00
回复了 keepwalk2020 创建的主题 分享创造 用 kindle 写作?运行在 kindle 平台上的文本编辑器 N31_KTe
前面的下载链接好像打不开了,另一个可以下载的链接:
https://bookfere.com/post/717.html
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()
1  2  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4086 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 22ms · UTC 05:23 · PVG 13:23 · LAX 22:23 · JFK 01:23
Developed with CodeLauncher
♥ Do have faith in what you're doing.