python - Node 子进程生成 : Stdout returning an Undefined Value

标签 python node.js stdout child-process

处理本来应该是一个简单的问题,但我已经坚持了一段时间了。可能与字符串编码、管道或其他完全有关 - 不确定。

这是一些显示问题的代码 - 这是调用 python 脚本的子生成:

const spawn = require('child_process').spawn;
let py = spawn('python', ['../py-docker-encryption/handle_encrypt.py']);

let encMsg = {action: 'enc', data: []}
encMsg.data.push(allArr[0].items.S)
let dataString;
py.stdout.on('data', (data) => {
  dataString += data.toString();
})
py.stdout.on('end', () => {
  console.log(dataString)
})
py.stdin.write(JSON.stringify(encMsg));
py.stdin.end()
// py.on('close', (code) => {
//   cb(null, dataString)
// })

Python代码很复杂,但我已经对其进行了彻底的测试:它是一个加密脚本,它将密文返回到stdout。但这并不重要。最重要的是,.on('data') 管道中的标准输出正常返回,但是当脚本关闭或调用 .on('end') 时,单个“未定义”会被添加到 dataString 的开头字符串。例如,这是我的控制台(重要的是开始时未定义 - 其余的是正常操作):

    undefined[{"data": "AYADeJldNsBlMPApbYJydOfQ5msAXwABABVhd3MtY3J5cHRvLXB1YmxpYy1r
ZXkAREF3aUNDRWRHOTlUUHNYMFlwWVZLVnBPaHFxMDhiQ0NXOUkyWUVocEdTMWV4TkpjV0VxRnlFZ0xa
dkpIOVVmZEM1QT09AAEAB2F3cy1rbXMATmFybjphd3M6a21zOmV1LWNlbnRyYWwtMTo5MDUwNDk5MjMx
NjI6a2V5L2Q4NTNhNzdhLTJmMmMtNDRkNy04ZmNjLTE3MzNmZmVjYmM5NwC4AQIBAHg4n+ZTthRASUgK
QrDeQL96fA+8KdXwWlK3rIBH8nfwGQEln5SRtpBSM1tkyjxWDfoLAAAAfjB8BgkqhkiG9w0BBwagbzBt
AgEAMGgGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQMv+tUKJb0bdkvMe8FAgEQgDuy7Vx1nDBCUUGS
+GmG5gl7VcFP1e7t0BcSZ3KYeOgZDdZsH3iMXajtPktejPYzmBxFbxigN0ZQLXti2wIAAAAADAAAEAAA
AAAAAAAAAAAAAADhoAGEpZmeu/1Y+eOqL8OX/////wAAAAEAAAAAAAAAAAAAAAEAAAAEZ0I1VTfw2cHO
wx7ejXvVx9+vZjsAZzBlAjAw7KDk/iwWADqUfKmjyjKGrEab/bTUXu59A5xA0Db/L5JgCnhqlw3n8MTW
haVlqmwCMQDKSmZeKXJn0tvDYIYlVY20VwD+HRBTji/P62cREOE89iPbjLOykxeQJyqB3K7eGlA=\n"}
]

对此有什么想法吗?我的用例比这更复杂,而且我看不到自己只是解析未定义的内容 - 看起来真的很hacky。

非常感谢!

最佳答案

dataString 变量的初始值为未定义。当您将其强制转换为字符串时(与另一个字符串连接时隐式完成),它使用文字单词 'undefined',与 null 和许多其他非字符串值类似.

相反,将其初始化为空字符串,您就不会遇到此行为。

关于python - Node 子进程生成 : Stdout returning an Undefined Value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45703369/

相关文章:

python - 应用三参数函数的 'reduce' 列表的 Pythonic 方法是什么?

node.js - NodeJS Express 模块 : 'dotfile' options no working

javascript - 套接字.io : Receiving data from server node js

python - 记录器配置以记录到文件并打印到标准输出

python - 用于本地客户端-服务器通信的套接字与标准流

python - 使用maven的python项目的项目结构

python - 从 Python 迁移到 Racket(正则表达式库和 "Racket Way")

node.js - 使用 $push 时如何验证数组长度?

审查c中的单词

python - 如何从源头构建?