2017-08-16 1 views
0

Umgang mit was sollte ein einfaches Problem sein, aber ich habe es für eine Weile stecken. Könnte mit String-Codierungen oder Pipes oder etwas ganz anderem zu tun haben - nicht sicher.Node Kind Prozess Spawn: Stdout gibt einen undefinierten Wert zurück

Hier ist ein Code, der das Problem zeigt - es ist ein Kind Laich ist ein Python-Skript aufrufen:

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) 
// }) 

Der Python-Code ist komplex, aber ich habe es gründlich getestet: es ist ein Skript-Verschlüsselung, die die zurückgibt Chiffretext zu stdout. Aber das macht nichts. Unter dem Strich kehrt das stdout in der .on ('data') Pipe normal zurück, aber bis zum Schließen des Skripts oder .on ('end') wird ein einzelner "undefined" an den Anfang des dataStrings angeheftet Zeichenfolge. Zum Beispiel, das ist meine Konsole ist (alles, was am Anfang ist die undefinierte zählt - der Rest Normalbetrieb ist):

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"} 
] 

Irgendwelche Ideen dazu? Mein Anwendungsfall ist komplizierter als das, und ich kann mich nicht sehen, dass ich nur die Undefinierten heraus analysiere - scheint wirklich hacky.

Vielen Dank!

Antwort

1

Der Anfangswert der dataString Variable ist undefined. Wenn Sie das auf eine Zeichenfolge anwenden (implizit bei der Verkettung mit einer anderen Zeichenfolge), verwendet es das Literalwort 'undefined', ähnlich wie null und viele andere Nicht-String-Werte.

Stattdessen initialisieren Sie es auf eine leere Zeichenfolge, und Sie werden dieses Verhalten nicht auftreten.

+0

Sie sind ein Lebensretter Kerl. Ich werde diese Antwort morgen überprüfen, und Ihre Antwort akzeptieren, wenn sie es behebt (was ich sicher machen werde, das macht sehr viel Sinn). Große Einsicht. –

Verwandte Themen