[NodeJS] Node_module via child_process exec

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • moijamie
  • Registratie: Augustus 2013
  • Laatst online: 12-10 13:55
Hallo allemaal

Ben wat aan het experimenteren met Node-webkit en Node.js. Het is een relatief simpel programmatje een paar api's ge combineert om wat trending muziek te krijgen met magnet links. De magnets links open ik vervolgens met Peerflix module in vlc. Dit werkte allemaal naar behoren op mijn machine maar als ik het "Release" werkt het niet meer want ik had Peerflix geïnstalleerd met "npm install peerflix -g" en zonder peerflix krijg je natuurlijk een "Command not found". Om dit op te lossen heb ik geprobeerd peerflix nogmaals te installeren maar zonder -g en deze staat nu ook netjes in de bijbehorende node_modules directory. Maar krijg nog steeds een "Command not found". Hoe kan ik dit nu oplossen?

betreffende stukje

code:
1
2
3
4
5
6
7
8
9
10
var exec = require('child_process').exec,
child;

child = exec('peerflix "'+q+'" --vlc',function (error, stdout, stderr){
    console.log('stdout: ' + stdout);
    console.log('stderr: ' + stderr);
    if (error !== null) {
      console.log('exec error: ' + error);
    }
});

const { signature } = await fetchProfile()


Acties:
  • 0 Henk 'm!

  • EddoH
  • Registratie: Maart 2009
  • Niet online

EddoH

Backpfeifengesicht

Probeer eerst te kijken of je commando wel in een gewone shell werkt. Het enige wat dit programma doet is namelijk een proces starten met de gegeven command string.
Kijk ook eens wat nu de output is van je totale string op je productie machine. Wat is q bijvoorbeeld?

[ Voor 8% gewijzigd door EddoH op 07-07-2015 12:38 ]


Acties:
  • 0 Henk 'm!

  • moijamie
  • Registratie: Augustus 2013
  • Laatst online: 12-10 13:55
EddoH schreef op dinsdag 07 juli 2015 @ 12:36:
Probeer eerst te kijken of je commando wel in een gewone shell werkt. Het enige wat dit programma doet is namelijk een proces starten met de gegeven command string.
Kijk ook eens wat nu de output is van je totale string op je productie machine. Wat is q bijvoorbeeld?
Commando werkt prima in een gewone shell zolang peerflix met -g is geïnstalleerd. Heb het inmiddels al soort van gedeeltelijk opgelost door "/usr/local/bin/node ./source/node_modules/peerflix/app.js "'+q+'" --vlc" te gebruiken maar nu moet de gene die mijn programma krijgt ook node.js geïnstalleerd hebben en dat lijkt me niet de bedoeling van het hele NW.js idee. var q is overigens een string met een magnet uri die peerflix gebruikt voor de stream met vlc.

const { signature } = await fetchProfile()


Acties:
  • 0 Henk 'm!

  • EddoH
  • Registratie: Maart 2009
  • Niet online

EddoH

Backpfeifengesicht

De peerflix executable kan waarschijnlijk niet gevonden worden vanuit de environment waarin je applicatie draait. Om dit te testen kun je eens het absolute pad naar de peerflix executable op je productie/release omgeving in je code gebruiken (even 'which peerflix' runnen vanuit een shell om achter het absolute pad te komen)

Acties:
  • 0 Henk 'm!

  • moijamie
  • Registratie: Augustus 2013
  • Laatst online: 12-10 13:55
EddoH schreef op dinsdag 07 juli 2015 @ 17:27:
De peerflix executable kan waarschijnlijk niet gevonden worden vanuit de environment waarin je applicatie draait. Om dit te testen kun je eens het absolute pad naar de peerflix executable op je productie/release omgeving in je code gebruiken (even 'which peerflix' runnen vanuit een shell om achter het absolute pad te komen)
which peerflix output: Command failed which peerflix

beetje lastig uit te leggen maar peerflix is niet geïnstalleerd dus het command peerflix kent ie niet maar heb de source code dus gelezen en kwam er achter dat het peerflix commando een .js bestand aanroept in dit geval app.js en die moet ik dus uitvoeren met node wat ik had in mijn tweede post, maar daarvoor moest de "gebruiker" Node geïnstalleerd hebben wat dus niet handig is. Maar kan kennelijk ook het bestand aanroepen met nwjs wat mijn "executable" is. Het is dus gelukt met het volgende commando './nwjs.app/contents/macos/nwjs ./source/node_modules/peerflix/app.js "'+q+'" --vlc' 8)

const { signature } = await fetchProfile()


Acties:
  • 0 Henk 'm!

  • robkorv
  • Registratie: Maart 2005
  • Laatst online: 13-10 09:08
als je de module lokaal installeert is het commando dit exposed maar de library aan spreekbaar binnen node. Als je het commando dus wilt gebruiken zal je hem altijd globaal moeten installeren.

Als je het echt via een programatische weg wilt oplossen kijk dan is naar de volgende entry in de README van peerflix https://github.com/mafintosh/peerflix#programmatic-usage.
Pagina: 1