2016-11-22 23 views
2

このプログラムはコンソールで終了しないため、Ctrl-Cを使用する必要があります。ドキュメンテーションは手がかりを与えません。 Returnのようないろいろなことを試してみましたが、終了させることはできません。ただコンソールにハングアップします。コンソールの最後のものは「今ここにいる」です。Nodejsプログラムが終了しない

var fs = require('fs'); 
var path = require('path'); 
var co = require('co'); 
var prompt = require('co-prompt'); 
var program = require('commander'); 

program 
.arguments('<file>') 
.option('-i, --Object name <objectName>', 'DP device IP address') 
.action(function(file) { 
    co(function *() { 
     var objectName = yield prompt('Object Name: '); 
     console.log('\nObject Name: %s file: %s',objectName, file); 
     notmain(file, objectName); 
     console.info('now we are here'); 
    }); 
}) 
.parse(process.argv); 

function notmain(file, objectName) { 
    try { 
     var normalPath = path.normalize(__dirname + '/' + file); 
     console.info('\nfile path ' + normalPath); 
     certstring = fs.readFileSync(normalPath).toString(); 
     console.info('\nstring of cert file is \n' + certstring); 
     clientcert = fs.readFileSync(normalPath).toString('base64'); 
     console.info('\nbase64 string of cert file is \n' + clientcert); 
     var newJson = {}; 
     newJson.name = objectName; 
     newJson.content = clientcert; 
     var newfile = {"file": newJson}; 
     console.info('\nnew json for cert object ' +  JSON.stringify(newfile)); 
     console.info('\nclient certificate read from directory '); 
    } catch (err) { 
     console.info('file path ' + normalPath); 
     console.info('client certificate file not found'); 
     return; 
    } 
} 
+0

process.exit(0)で動作する唯一のもののような

process.stdin.pause(); 

が、他の回答には、それは最後の手段であると言います。プログラムは明らかに何かを待っている、私はそれが完了したことを伝える必要があります。 – Nepomuk

+0

'co'は定義されておらず、(何でも)停止するように指示する必要があります。 – OrangeDog

+0

coは、ジェネレータと約束を使用した非同期コードのラッパーです。それは一番上に定義されています。 – Nepomuk

答えて

0

コンソールが入力を待っています。 'now we are here'の後にこれを追加してみてください。この

co(function *() { 
    var objectName = yield prompt('Object Name: '); 
    console.log('\nObject Name: %s file: %s',objectName, file); 
    notmain(file, objectName); 
    console.info('now we are here'); 
    process.stdin.pause(); 
}); 
+0

ありがとう、それはうまくいきました。私もコードを黙視し、コールバックしました。 – Nepomuk

0
co(function *() { 
     var objectName = yield prompt('Object Name: '); 
     console.log('\n1 Object Name: %s file: %s',objectName, file); 
     var normalPath = path.normalize(__dirname + '/' + file); 
     console.info('\n2 file path ' + normalPath); 
     fs.readFile(normalPath, function(err, data) { 
      if (err) { 
       throw err; 
      } 
      console.info('\n4 string of cert file is \n' + data); 
      if (!(data.includes('BEGIN CERTIFICATE'))) { 
       throw 'invalid file type'; 
      } 
      let b64 = data.toString('base64'); 
      notmain(b64, objectName, results); 
     }) 
     process.stdin.pause(); 
    }) 
関連する問題