转义序列和Node.js子进程生成

时间:2019-07-16 17:03:17

标签: node.js

我正在尝试在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上遇到了问题。我不知道在外壳中调用它时是否正确转义了空格。有什么办法可以检查吗?有某种方法可以做到吗?

这是在Linux环境中。

谢谢

2 个答案:

答案 0 :(得分:2)

您无需在这里转义,因为库会在需要它的平台上为您完成任务。

@if ($errors->hasAny(['c1', 'c2', ...]))
   <p>To Do</p>
@endif

答案 1 :(得分:1)

我在您的代码中看到的一件事是您正在返回一个诺言,但是您从未在实现上调用std::vectorresolve

尝试做这样的事情:

reject

我认为您如何转义字符串参数上的空格没有问题。我使用此Python脚本进行了尝试,效果很好:

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();
    });
  });
}

它只显示参数。

请查看此链接,以获取有关JavaScript Promise接口的更多信息:

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

我希望对您有帮助