使用node.js child_process调用python脚本(Call python script using node.js child_process)
我试图从我的节点文件中调用python代码。
这是我的node.js代码:
var util = require("util");
var spawn = require("child_process").spawn;
var process = spawn('python',["workpad.py"]);
util.log('readingin')
process.stdout.on('data',function(data){
util.log(data);
});
和我的python部分:
import sys
data = "test"
print(data)
sys.stdout.flush()
在cmd窗口中,仅显示util.log('readingin') 。 我的代码有什么问题?
I was trying to call a python code from my node file.
Here is my node.js Code:
var util = require("util");
var spawn = require("child_process").spawn;
var process = spawn('python',["workpad.py"]);
util.log('readingin')
process.stdout.on('data',function(data){
util.log(data);
});
and my python part:
import sys
data = "test"
print(data)
sys.stdout.flush()
In the cmd window, only util.log('readingin') is shown. What's the problem of my code?
原文:https://stackoverflow.com/questions/34213845
2020-10-25 21:10
满意答案
没有问题 ...
这是你的工作代码的轻微调整(我将缓冲区转换为字符串,因此它的人类可读)
// spawn_python.js
var util = require("util");
var spawn = require("child_process").spawn;
var process = spawn('python',["python_launched_from_nodejs.py"]);
util.log('readingin')
process.stdout.on('data',function(chunk){
var textChunk = chunk.toString('utf8');// buffer to string
util.log(textChunk);
});
这是你的python
# python_launched_from_nodejs.py
import sys
data = "this began life in python"
print(data)
sys.stdout.flush()
最后这里是一个运行的输出
node spawn_python.js
11 Dec 00:06:17 - readingin
11 Dec 00:06:17 - this began life in python
node --version
V5.2.0
There is no problem ...
Here is a slight tweak of your working code (I convert the buffer to string so its human readable)
// spawn_python.js
var util = require("util");
var spawn = require("child_process").spawn;
var process = spawn('python',["python_launched_from_nodejs.py"]);
util.log('readingin')
process.stdout.on('data',function(chunk){
var textChunk = chunk.toString('utf8');// buffer to string
util.log(textChunk);
});
and here is your python
# python_launched_from_nodejs.py
import sys
data = "this began life in python"
print(data)
sys.stdout.flush()
finally here is output of a run
node spawn_python.js
11 Dec 00:06:17 - readingin
11 Dec 00:06:17 - this began life in python
node --version
v5.2.0
2015-12-11
相关问答
您可以假设孩子已经开始准备就绪。 节点将缓冲您发送的异步消息(达到限制)。 从Node v5.8.0开始,如果出现错误,可以在send注册回调(如果发送失败,可以通知您)。 另外, child_process.send文档说: 如果未提供回调函数且无法发送消息,则ChildProcess对象将发出“错误”事件。 例如,当子进程已经退出时,就会发生这种情况。 基本上,因为很多东西都可能出错,所以在您的应用程序实际与它进行对话并获得对您的代码有意义的有效响应之前,您无法确切知道您的子进程正常运行。 因...
我发现了模拟衍生图书馆,这几乎是我想要的。 它允许模拟spawn呼叫并将预期结果提供回呼叫测试。 一个例子: var mockSpawn = require('mock-spawn');
var mySpawn = mockSpawn();
require('child_process').spawn = mySpawn;
mySpawn.setDefault(mySpawn.simple(1 /* exit code */, 'hello world' /* stdout */));
更高...
不要在命令行参数中使用& (和号)。 它由shell使用,而不是由python使用。 使用{detached: true}选项,以便在Node进程退出时能够生效: var spawn = require("child_process").spawn;
var p = spawn("python", ["/path/to/test.py"], {detached: true});
如果你还想要输出它的输出,请使用{stdio: 'ignore'} var spawn = require("chil...
看起来像node.js中的一个bug派给我:父进程和子进程都接收--debug-brk=58954切换并尝试启动调试器并监听端口58954。 looks like a bug in node.js fork to me: both parent and child processes receive --debug-brk=58954 switch and attempt to start debugger and listen port 58954.
很可能因为execFile没有创建shell所以它不知道如何找到python解释器。 尝试: exec.exec('python db_app.py', {cwd:'.'},function(..){..})
Most likely because execFile is not creating a shell so it doesn't know how to find the python interpreter. Try: exec.exec('python db_app.py', {c...
当调用exec的回调时,该进程已经终止。 无需添加额外的支票。 对于spawn ,您可以绑定exit事件侦听器 。 When the callback of exec is called, the process has already been terminated. There's no need to add an additional check. For spawn, you can bind an exit event listener.
您可以通过在exec调用之后立即放入process.exit(0)来退出。 You can always exit hard by putting process.exit(0) right after the exec call.
我通过将命令放在shell脚本中并从节点子进程调用脚本来解决这个问题。 我还需要添加以下内容以在posix模式下设置bash以允许进程替换: set +o posix
可能有更好的方法直接从节点内执行此操作,但它完成了这项工作。 干杯! I solved this by putting the commands in a shell script and calling the script from the node child process. I also needed to add th...
这是个很大的差异。 C ++ Addon是本机代码,它作为主应用程序的一部分运行(与JS一样)。 但是如果使用child_process ,node将启动新进程并且存在巨大的开销(产生进程比在一个线程中运行本机代码复杂得多)。 如果您决定使用哪种方法,则很大程度上取决于您的情况。 如果您熟悉C ++并且想要处理数千个请求,那么您可能应该考虑编写一个插件。 但是如果你正在编写一个供个人使用的小应用程序,并且你的附加程序已经作为独立应用程序运行,我会使用child_process,它也可以用更少的工作...
没有问题 ... 这是你的工作代码的轻微调整(我将缓冲区转换为字符串,因此它的人类可读) // spawn_python.js
var util = require("util");
var spawn = require("child_process").spawn;
var process = spawn('python',["python_launched_from_nodejs.py"]);
util.log('readingin')
process.stdout.on('data'...
相关文章
捷训Node.js入门教学视频,对初学者来说应该不错的,教学视频中包括javascript的基本知识的
...
昨天QQ群里提了一个Hadoop运行效率分配的问题,总结一下,写个文章。集群使用hadoop-1.0.
...
Hi Pythonistas! 测试和调试 Testing & Debuggi
...
微信公众有两种,服务号和订阅号,服务号需要公司的执照和组织代码,申请很麻烦,所以我们申请一个订阅号即可
...
又拍网是一个照片分享社区,从2005年6月至今积累了260万用户,1.1亿张照片,目前的日访问量为20
...
又拍网是一个照片分享社区,从2005年6月至今积累了260万用户,1.1亿张照片,目前的日访问量为20
...
又拍网是一个照片分享社区,从2005年6月至今积累了260万用户,1.1亿张照片,目前的日访问量为20
...
又拍网是一个照片分享社区,从2005年6月至今积累了260万用户,1.1亿张照片,目前的日访问量为20
...
又拍网是一个照片分享社区,从2005年6月至今积累了260万用户,1.1亿张照片,目前的日访问量为20
...
最新问答
如果启用了复制处理程序,请确保将其置于其中一个安全角色之后。 我见过人们做的另一件事是在不同的端口上运行admin。 最好在需要auth的页面上使用SSL,这样你就不会发送明确的密码,因此管理和复制将发生在8443上,而常规查询将在8080上发生。 如果您要签署自己的证书,请查看此有用的SO页面: 如何在特定连接上使用不同的证书? I didn't know that /admin was the context for SOLR admin because /admin does not re
第一:在您的样本中,您有: 但是你在询问 //td[@class=‘CarMiniProfile-TableHeader’] (注意TableHeader中的大写'T')。 xpath区分大小写。 第二:通过查询// td [@ class ='CarMiniProfile-TableHeader'] / td,你暗示你在外部td中有一个'td'元素,而它们是兄弟姐妹。 有很多方法可以在这里获得制作和模型
这是你的答案: http://jsfiddle.net/gPsdk/40/ .preloader-container { position: absolute; top: 0px; right: 0px; bottom: 0px; left: 0px; background: #FFFFFF; z-index: 5; opacity: 1; -webkit-transition: all 500ms ease-out;
问题是,在启用Outlook库引用的情况下, olMailItem是一个保留常量,我认为当您将Dim olMailItem as Outlook.MailItem ,这不是问题,但是尝试设置变量会导致问题。 以下是完整的解释: 您已将olMailItem声明为对象变量。 在赋值语句的右侧,在将其值设置为对象的实例之前,您将引用此Object 。 这基本上是一个递归错误,因为你有对象试图自己分配自己。 还有另一个潜在的错误,如果之前已经分配了olMailItem ,这个语句会引发另一个错误(可能是
我建议使用wireshark http://www.wireshark.org/通过记录(“捕获”)设备可以看到的网络流量副本来“监听”网络上发生的对话。 当您开始捕获时,数据量似乎过大,但如果您能够发现任何看起来像您的SOAP消息的片段(应该很容易发现),那么您可以通过右键单击并选择来快速过滤到该对话'关注TCP Stream'。 然后,您可以在弹出窗口中查看您编写的SOAP服务与Silverlight客户端之间的整个对话。 如果一切正常,请关闭弹出窗口。 作为一个额外的好处,wireshar
Android默认情况下不提供TextView的合理结果。 您可以使用以下库并实现适当的aligntment。 https://github.com/navabi/JustifiedTextView Android Does not provide Justified aligntment of TextView By default. You can use following library and achieve proper aligntment. https://github.com/
你的代码适合我: class apples { public static void main(String args[]) { System.out.println("Hello World!"); } } 我将它下载到c:\ temp \ apples.java。 以下是我编译和运行的方式: C:\temp>javac -cp . apples.java C:\temp>dir apples Volume in drive C is HP_PAV
12个十六进制数字(带前导0x)表示48位。 那是256 TB的虚拟地址空间。 在AMD64上阅读wiki(我假设你在上面,对吗?)架构http://en.wikipedia.org/wiki/X86-64 12 hex digits (with leading 0x) mean 48 bits. That is 256 TB of virtual address space. Read wiki on AMD64 (I assume that you are on it, right?) ar
这将取决于你想要的。 对象有两种属性:类属性和实例属性。 类属性 类属性对于类的每个实例都是相同的对象。 class MyClass: class_attribute = [] 这里已经为类定义了MyClass.class_attribute ,您可以使用它。 如果您创建MyClass实例,则每个实例都可以访问相同的class_attribute 。 实例属性 instance属性仅在创建实例时可用,并且对于类的每个实例都是唯一的。 您只能在实例上使用它们。 在方法__init__中定