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

这是一些显示问题的代码-这是一个子派生调用的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')管道中的stdout正常返回,但是在脚本关闭或调用.on('end')时,将单个“ undefined”附加到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"}
]

有什么想法吗? 我的用例比这还要复杂,而且我看不到自己只是解析未定义的内容-似乎真的很hack。

非常感谢!

#1楼 票数:2 已采纳

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

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

  ask by Ryan Spicer translate from so

未解决问题?本站智能推荐:

1回复

从python派生子进程接收连续输出不起作用

我正在尝试从以python编写的秤流式传输输出。 该程序(scale.py)连续运行并每半秒打印一次原始值。 我试图获取每个原始数据点在单独的NodeJs程序(位于同一文件夹中的index.js)中,该程序由print val 。 这是我的节点程序。 当我运行sudo nod
1回复

如果过长,从Python通过child_process向节点发送JSON会被截断,该如何解决?

我的Node和Python后端运行得很好,但是现在遇到一个问题,如果我从Python向后发送的JSON没有Node太长,它将被拆分为两个,而我在Node端的JSON.parse失败。 我该如何解决? 例如,第一批剪辑在 第二个有剩余的几个条目 我是否必须在节点侧为长JSO
1回复

节点子进程生成的输出与终端不同

当我运行下面的代码时,我没有看到与直接通过终端运行此命令相同的输出到控制台。 知道为什么吗? 除了stdout.on('data')之外,还有其他函数可以吐出更多信息吗? 具体来说,当我通过终端运行它时,会得到一个进度条,指示命令完成的百分比。 当我通过节点运行它时,它会吐出一些较早
1回复

NodeJS子进程标准输出是所有数字

我正在编写一些node.js脚本来启动子进程。 代码段如下。 脚本运行良好,除了子进程的stdout和stderr只打印数字输出: 样本输出: 如何将这些数值转换为可读字符串? 谢谢。
1回复

获取节点中子进程的输出时出错

我有 ac 程序(我没有编写代码)可以在终端中打印一些数据。 我使用 spawn 函数将程序作为节点中的子进程启动。 之后,我对事件进行编码以获取打印数据: 当我运行程序时,我在 nodejs 终端中看不到我的 c 程序的输出数据。 如果我用 stdio 初始化子进程作为继承它工作。 这
1回复

如何解析标准输出的输出

例如,如果在nodejs子进程中执行,则如下所示: 我如何将回调函数中的流输出解析为数组以获取类似内容? 当前输出如下: 感谢您的帮助
1回复

从分离的衍生子进程获取输出

我正在使用 node.js 来启动一些需要一些时间的 shell 操作,例如: 所以我有 由于我希望子进程在主进程终止时继续运行(假设它还将结果写入文件),因此我使用以下选项: 但是,这意味着我无法在进程运行时接收有关该进程的任何数据,至少不能通过 stdout/stderr 接收。 我
1回复

NodeJS:如何读取由显式生成的进程生成的子进程的stdout和stderr?

我最近一直在按需构建服务器上工作。 构建服务器是NodeJS / Express REST API,它实质上包装了Angular CLI和相关的构建工具,用于完成自定义的按需Angular应用程序。 一切工作都按预期进行,但是我希望能够通过状态报告获得更详细的信息,因为当考虑到流程的两个