[英]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']).
有一件事我在你的代碼中看到的是,你是返回一個承諾,但你永遠不會調用resolve
或reject
對其實施。
嘗試做這樣的事情:
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.