Javascript 在Python中捕获节点命令的输出
我有一个javascript文件,在终端中使用Javascript 在Python中捕获节点命令的输出,javascript,node.js,python-3.x,subprocess,Javascript,Node.js,Python 3.x,Subprocess,我有一个javascript文件,在终端中使用node命令运行 node jstest3.js '{"example": [{"value": 2},{"value": 4},{"value": 5}]}' '$sum(example.value)' jstest.js var args = process.argv.slice(2); console.log(args[0]); var jsonata = require("jsonata"); var data = JSON.parse
node
命令运行
node jstest3.js '{"example": [{"value": 2},{"value": 4},{"value": 5}]}' '$sum(example.value)'
jstest.js
var args = process.argv.slice(2);
console.log(args[0]);
var jsonata = require("jsonata");
var data = JSON.parse(args[0]);
var expression = jsonata(args[1]);
var result = expression.evaluate(data);
console.log(result);
在候机楼
node jstest3.js '{"example": [{"value": 2},{"value": 4},{"value": 5}]}' '$sum(example.value)'
现在我需要通过Python运行这个命令,所以我使用Python的子流程模块来完成这个任务
import subprocess
result = subprocess.run(['node', 'jstest3.js', '{"example": [{"value": 2},{"value": 4},{"value": 5}]}', '$sum(example.value)'])
print(result)
但我得到三个值作为输出
{"example": [{"value": 2},{"value": 4},{"value": 5}]}
11
CompletedProcess(args=['node', 'jstest3.js', '{"example": [{"value": 2},{"value": 4},{"value": 5}]}', '$sum(example.value)'], returncode=0)
但是我只需要值11
result = subprocess.run(['node', 'jstest3.js', '{"example": [{"value": 2},{"value": 4},{"value": 5}]}', '$sum(example.value)'], stdout=subprocess.PIPE)
print(result.stdout)
b'{"example": [{"value": 2},{"value": 4},{"value": 5}]}\n11\n'
result = subprocess.call(['node', 'jstest3.js', '{"example": [{"value": 2},{"value": 4},{"value": 5}]}', '$sum(example.value)'])
print(result)
{"example": [{"value": 2},{"value": 4},{"value": 5}]}
11
0
如何仅获取11表达式的结果?您可以拆分结果字符串并获取返回代码(0)之前的最后一行标准输出(11)
通过调用并按“\n”拆分程序以提取输出,可以按字节序列获取程序的输出。要仅获取输出,可以对数组进行切片以删除arg
import subprocess
output = subprocess.check_output([
'node', 'jstest.js',
'{"example": [{"value": 2},{"value": 4},{"value": 5}]}',
'$sum(example.value)'
])
# capture all the logged lines from the node process
result = output.split(b'\n')[1:-1]
for line in result:
print(line.decode('utf-8'))
# output
11
抱歉,check_调用只检查返回代码,因此check_输出是正确的函数