Python-Shell / Node JS输出为空

时间:2018-05-08 02:59:11

标签: python node.js npm electron

背景故事:我正在使用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(),那么我可以看到测试消息打印到节点控制台。

1 个答案:

答案 0 :(得分:0)

在开始实际故障排除之前,使用python调用w32api的主要原因是什么?首先你可以通过电子/ nodejs本身来做,而且电子将直接在powerMonitor中有一个特定事件(https://github.com/electron/electron/blob/3a0640993ba9748ced9f9cd00de5dbfe7651f788/docs/api/power-monitor.md#event-lock-screen-macos-windows)并不一定需要第三方代码。