2013-07-24 1 views
1

J'ai une application javascript qui doit démarrer une application Linux. Comme je n'ai trouvé aucun moyen de démarrer l'application et de la terminer, j'ai créé un script bash qui lance l'application et envoie un message via un tube nommé lorsque l'application se ferme. Jusqu'à ici, tout va bien, mais je ne trouve pas un moyen d'attraper ce message dans le javascript.Message entre bash et javascript via des canaux nommés

Est-ce que quelqu'un savait comment obtenir le message dans le javascript?

J'ai fait une recherche, mais j'ai seulement trouvé comment faire cela en C# et C++.

Extrait du javascript:

var test = spawn('sh', ['home/pi/play.sh', data.video_id]); 

juste fraient une commande bash Wich lancer le script avec le nom de la vidéo

Extrait du bash:

mkfifo btjpipe 
if pgrep omxplayer 
then 
    echo "AR">btjpipe 
else 
    clear 
    omxplayer $1 > dev/null 
    echo "VE">btjpipe 

Créé le tuyau , en cherchant si le joueur est déjà en cours d'exécution, envoyez soit AR ("Déjà en cours") ou démarrez le joueur et envoyez VE ("Video End").

+0

Quel moteur JavaScript et quel environnement utilisez-vous? NodeJS? SilkJS? –

+0

Je suis sur un raspeberry pi en utilisant raspbian (debian pour framboise pi), sur chrome, avec node.js – DrakaSAN

+0

J'ai ajouté le tag 'nodejs' (vraiment très important pour votre question). Aucune idée de ce que vous entendez par "sur chrome" - si vous utilisez Raspbian, vous n'utilisez pas Chrome OS, et le seul autre Chrome pertinent que je peux penser est un navigateur Web, mais vous ne le faites pas dans un navigateur Web. –

Répondre

2

utilisation module child_process et child.stdout pour diriger la sortie où vous voulez

var spawn = require('child_process').spawn; 
var test = spawn('sh', ['home/pi/play.sh', data.video_id]); 


test.stdin.pipe(process.stdin); 
test.stdout.pipe(process.stdout); 
test.stderr.pipe(process.stderr); 

sur ce cas au processus actuel

Peut-être que vous pouvez essayer en utilisant « exec » au lieu de spawn, vous obtiendra la sortie dans la fonction de rappel.

+0

Donc, avec test.stdin.pipe (process.stdin) ;, si les données sont dans le pipe, elles seront maintenant en test? – DrakaSAN

+0

Le processus de l'enfant était le bon indice, merci beaucoup – DrakaSAN