我有一个javascript文件,我在终端
中使用node
命令运行
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 :(得分:1)
您可以通过调用check_output以字节顺序获取程序的输出,并将其拆分为' \ n'提取输出。要仅获取输出,可以对数组进行切片以删除args。
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
答案 1 :(得分:0)
您可以拆分结果字符串并在返回码(0)之前获取最后一个stdout行(11)
import subprocess
output = subprocess.check_output([
'node', 'jstest.js',
'{"example": [{"value": 2},{"value": 4},{"value": 5}]}',
'$sum(example.value)'
])
result = output.split('\n')[-2]