I want to execute 'python3 sample.py --path.data=/root/tej4' command from nodejs.The below is my code -
const runningPython = async(req,res,next) => {
ssh.connect({
host: '******',
port: 22,
username: 'ubuntu',
privateKey: '*******'
}).then(function () {
exec('python3 sample.py --path.data=/root/tej4', (err, stdout, stderr) => {
if (err) {
console.log(err)
}
// the *entire* stdout and stderr (buffered)
console.log(`stdout: ${stdout}`);
console.log(`stderr: ${stderr}`);
});
})
}
But what I am getting response is its trying to run locally rather than on aws cli. Not sure how to achieve this?
Error: Command failed: python3 sample.py --path.data=/root/tej4
Python was not found; run without arguments to install from the Microsoft Store, or disable this shortcut from Settings > Manage App Execution Aliases.
at ChildProcess.exithandler (node:child_process:397:12)
at ChildProcess.emit (node:events:390:28)
at maybeClose (node:internal/child_process:1064:16)
at Process.ChildProcess._handle.onexit (node:internal/child_process:301:5) {
killed: false,
code: 9009,
signal: null,
cmd: 'python3 sample.py --path.data=/root/tej4'
}
stdout:
stderr: Python was not found; run without arguments to install from the Microsoft Store, or disable this shortcut from Settings > Manage App Execution Aliases.
CodePudding user response:
You have to create an instance of type node_ssh
and use that instance to call connect
and executeCommand
methods
const node_ssh = require('node-ssh');
const ssh = new node_ssh();
ssh
.connect({
host: '******',
port: 22,
username: 'ubuntu',
privateKey: '*******'
})
.then(() => {
ssh.execCommand('python3 sample.py --path.data=/root/tej4', { cwd:'/your-python-script-path-here' })
.then((result) => {
console.log('STDOUT: ' result.stdout)
console.log('STDERR: ' result.stderr)
});
CodePudding user response:
Earlier I was using ssh lib but for sudo su and running multiple commands I switched to ssh2shell and changed the code as follow -
const runningPython = async(req,res,next) => {
var host = {
server: {
host: ***** ,
username: *****,
privateKey: fs.readFileSync('ppk file path'),
},
commands: [ "sudo su -", "python3 sample.py --path.data=root/tej4" ],
onCommandComplete: function( command, response, sshObj ) {
if(sshObj.debug){
this.emit("msg", this.sshObj.server.host ": host.onCommandComplete event, command: " command);
}
if (command === "sudo su -" && response.indexOf("/root") != -1 ) {
sshObj.commands.unshift("msg:The command and response check worked. Added another cd command.");
sshObj.commands.unshift("cd .ssh");
}
else if (command === "python3 sample.py --path.data=root/tej4"){
this.emit("msg", response);
}
},
onEnd: function( sessionText, sshObj ) {
if(sshObj.debug){this.emit("msg", this.sshObj.server.host ": host.onEnd event");}
}
};
let SSH = new SSH2Shell(host),
//Use a callback function to process the full session text
callback = function(sessionText){
console.log(sessionText)
}
//Start the process
SSH.connect(callback);
}