我正在构建一个需要一些python后端的Electron应用程序。我不想每次需要调用数据时都运行Python脚本,因为该文件需要花一些时间才能开始(导入数据和库),但是功能非常快。
在尝试初始化python脚本后,我试图找到一种方法将数据从.js文件发送到Python文件,但是我似乎并没有完全正确。
main.js
const spawn = require("child_process").spawn;
const pythonProcess = spawn('python',["hello.py"]);
pythonProcess.stdout.on('data', (data) => {
alert(data)
});
pythonProcess.send(2)
hello.py
import sys
import time
for line in sys.argv:
print(line)
这将在应用程序中返回“ [Hello.py,1]”,这是从.js文件发送到.py文件的初始参数。 .js文件似乎没有执行最后一行; pythonProcess.send()。
如何最轻松地做到这一点?这样做的目的是检测sys.argv的变化并在发生这种情况时在python文件中运行一个函数。
答案 0 :(得分:0)
最简单的方法是将node
的标准输出通过管道传递到python
的标准输入,并在Python中继续读取stdin
直至结束。不好的是,您很可能希望从Node应用程序获得一些控制台输出,而您绝对不希望将其传递给Python。
第二个推荐的方法是使用tcp/ip
频道。在这种情况下,您还可以从将Python应用程序移至另一台机器/容器中受益。在Python中监听tcp / ip输入非常简单,我通常使用以下方法:
from twisted.internet.protocol import Factory, Protocol
from twisted.protocols.basic import LineReceiver
class DataProcessor(LineReceiver):
def lineReceived(self, line):
print('Line received: {}'.format(line))
Factory factory = Factory()
factory.protocol = DataProcessor
reactor.listenTCP(8080, factory)
答案 1 :(得分:0)
您需要做的就是向您的pythoncode发出ajax请求。您可以使用jquery http://api.jquery.com/jQuery.ajax/进行此操作,也可以只使用javascript
$.ajax({
type: "POST",
url: "~/pythoncode.py",
data: { param: text}
}).done(function( o ) {
// do something
});