簡體   English   中英

轉義序列和Node.js子進程生成

[英]Escape sequences and Node.js child process spawning

我試圖在node.js服務器中運行一些python代碼。

我正在運行python:

//handler.js

const spawn = require("child_process").spawn

module.exports = (parameter) => {
  return new Promise((resolve, reject) => {
    //***vvv***
    const pythonProcess = spawn('python', [filepath/to/main.py, '--option', 'argument1', 'parameter', 'multiple\ word\ argument', 'argument2']).
    //***^^^***


    //and the functions that go with it for now
    pythonProcess.stdout.on('data', function(data) {
      consolde.log("data: ", data.toString())
    })    

    pythonProcess.on('exit', function(code) {
      console.log("EXIT: ", code.toString())
    })

  }
}

我遇到了腳本問題。 我相信我遇到了multiple\\ word\\ argument 在shell中調用它時,我不知道它是否正確地轉義了空格。 有沒有辦法檢查? 有沒有辦法做到這一點?

這是在Linux環境中。

謝謝

您無需在此處轉義,因為庫在需要它的平台上為您執行此操作。

 const pythonProcess = spawn('python', ['filepath/to/main.py', '--option', 'argument1', 'parameter', 'multiple word argument', 'argument2']).

有一件事我在你的代碼中看到的是,你是返回一個承諾,但你永遠不會調用resolvereject對其實施。

嘗試做這樣的事情:

function callPython(parameter) {
  return new Promise((resolve, reject) => {
    const pythonProcess = spawn('python', [
      path.resolve(__dirname, 'print_arguments.py'),
      '--option',
      'argument1',
      'parameter',
      parameter,
      'multiple \word \argument',
      'argument2'
    ]);

    pythonProcess.stdout.on('data', data => {
      console.log("data:", data.toString());
    });

    pythonProcess.stdout.on('exit', code => {
      console.log("EXIT:", code.toString());
      resolve();
    });

    pythonProcess.stdout.on('error', error => {
      console.log('ERROR:', error.toString());
      reject();
    });
  });
}

我不認為你如何轉義字符串參數的空格有問題。 我嘗試使用這個Python腳本,它工作正常:

import sys

if __name__ == '__main__':
    for argument in sys.argv:
        print(str(argument))

它只打印參數。

有關JavaScript promise接口的更多信息,請查看此鏈接:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise

我希望它有所幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM