【发布时间】:2018-10-17 21:43:37
【问题描述】:
背景故事:我正在使用 Electron 创建一个应用程序,目前正在尝试在计算机锁定/解锁时运行一个功能。
经过多次反复试验,我终于设法让以下 python 代码正常工作。当相关代码被触发时,代码会在屏幕上打印 Locked 或 Unlocked。我现在需要从 Node JS 运行 python 脚本,以便在事件触发时运行更多函数。
import win32con
import win32gui
import win32ts
import time
print("Test")
WM_WTSSESSION_CHANGE = 0x2B1class WTSMonitor():
className = "WTSMonitor"
wndName = "WTS Event Monitor"
def __init__(self):
wc = win32gui.WNDCLASS()
wc.hInstance = hInst = win32gui.GetModuleHandle(None)
wc.lpszClassName = self.className
wc.lpfnWndProc = self.WndProc
self.classAtom = win32gui.RegisterClass(wc)
style = 0
self.hWnd = win32gui.CreateWindow(self.classAtom, self.wndName,
style, 0, 0, win32con.CW_USEDEFAULT, win32con.CW_USEDEFAULT,
0, 0, hInst, None)
win32gui.UpdateWindow(self.hWnd)
win32ts.WTSRegisterSessionNotification(self.hWnd, win32ts.NOTIFY_FOR_ALL_SESSIONS)
def start(self):
win32gui.PumpMessages()
def stop(self):
win32gui.PostQuitMessage(0)
def WndProc(self, hWnd, message, wParam, lParam):
if message == WM_WTSSESSION_CHANGE:
self.OnSession(wParam, lParam)
def OnSession(self, event, sessionID):
if event == 7:
print("Locked")
if event == 8:
print("Unlocked")
print(event)
myststa(event)
WTSMonitor().start()
节点代码:
const { spawn } = require('child_process');
let py = spawn('python',['locked.py'])
py.stdout.on('data', data => console.log('data : ', data.toString()))
py.on('close', ()=>{
})
当我使用“Python locked.py”从控制台运行 python 时,我看到打印的测试消息。但是,当使用 node locked.js 运行时,脚本看起来像是在运行,但从不打印到控制台。
另外要提的是,如果我注释掉最后一行 WTSMonitor().start() 那么我可以看到测试消息打印到节点控制台。
【问题讨论】:
标签: python node.js npm electron