节点中的PythonShell(nwjs)

2024-09-19 23:28:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我想创造一个西北js使用节点模块pythonsell与Python通信的应用程序。在

我遇到的问题是,除非我关闭stdin,否则不会向控制台写入任何内容。不过,我希望保持流的打开状态,以便可以向Python脚本发送多个命令,并让Python保存其状态。在

以下是我的脚本:

在脚本.py在

import sys

def main():
    command = sys.stdin.readlines()  # unused for now
    sys.stdout.write("HELLO WORLD")
    sys.stdout.flush()

if __name__ == '__main__':
    main()

在主.js在

^{pr2}$

在这一点上,什么都没有发生。在

如果我执行pyshell.end(),那么{}将被输出到控制台。但是我不能再发出pyshell.send命令。在

如何让Python子进程保持运行并等待输入,同时将所有输出管道返回JS?在


Tags: 模块py命令脚本应用程序内容节点main
1条回答
网友
1楼 · 发布于 2024-09-19 23:28:54

几个问题:

  • 使用sys.stdin.readline()代替sys.stdin.readlines()。否则,Python将继续等待您完成输入流。您应该能够发送一个^D信号来终止输入的结尾,但这对我不起作用。

  • 要使流保持打开状态,请将命令行输入包装在一个循环中(请参见下面的Python代码)

同样重要的是:

  • {cd4>不会自动追加。无论出于什么原因,输出都需要\n和{}才能工作;其中一个不能切断输出。

  • pythonshell似乎缓存了Python代码。因此,如果对Python文件进行任何更改,必须重新启动nwjs应用程序才能使其生效。

下面是工作的完整示例代码:

在脚本.py在

import sys

def main():
    while True:
        command = sys.stdin.readline()
        command = command.split('\n')[0]
        if command == "hello":
            sys.stdout.write("You said hello!\n")
        elif command == "goodbye":
            sys.stdout.write("You said goodbye!\n")
        else:
            sys.stdout.write("Sorry, I didn't understand that.\n")
        sys.stdout.flush()

if __name__ == '__main__':
    main()

在主.js在

^{pr2}$

现在使用pyshell.send("hello")pyshell.send("goodbye")、或{}并在JS控制台中立即接收响应!在

相关问题 更多 >