Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Python中捕获节点命令的输出_Javascript_Node.js_Python 3.x_Subprocess - Fatal编程技术网

Javascript 在Python中捕获节点命令的输出

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

我有一个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(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_输出是正确的函数