{"id":661,"date":"2012-10-19T11:16:29","date_gmt":"2012-10-19T09:16:29","guid":{"rendered":"http:\/\/www.unicoda.com\/?p=661"},"modified":"2017-09-10T16:12:40","modified_gmt":"2017-09-10T14:12:40","slug":"nodejs-spawn-ou-la-creation-de-processus-fils","status":"publish","type":"post","link":"https:\/\/www.unicoda.com\/?p=661","title":{"rendered":"[NodeJs] Spawn ou la cr\u00e9ation de processus fils"},"content":{"rendered":"<p>Un petit mot sur la fa\u00e7on de cr\u00e9er des processus fils sous <a href=\"http:\/\/nodejs.org\/\">node<\/a>.<br \/>\nPas compliqu\u00e9 et bien pratique, pour r\u00e9aliser le cas de test d&rsquo;une nouvelle fonctionnalit\u00e9 de <a href=\"https:\/\/npmjs.org\/\">npm<\/a> par exemple.<\/p>\n<p>Regardons le prototype:<br \/>\n<em>child_process.spawn(command, [args], [options])<\/em><br \/>\n<em>command<\/em> correspond au programme appel\u00e9, ls, grep ou autre&#8230;<br \/>\n<em>[args]<\/em> est un tableau contenant tous les arguments qui seront pass\u00e9s au programme appel\u00e9 via command.<br \/>\n<em>[options]<\/em> Plusieurs possibilit\u00e9s, dont le fait de pouvoir d\u00e9finir des r\u00e8gles pour le comportement de stdin, stdout et stderr.<\/p>\n<p>Exemple:<\/p>\n<pre>\/\/Set the no-proxy configuration\r\nvar noProxy = spawn(node, [npm, 'config', 'set', 'noproxy=localhost']\r\n, { stdio: 'ignore' });<\/pre>\n<p>Ici, on cr\u00e9e un processus fils node avec pour param\u00e8tres: <em>npm config noproxy=localhost<\/em>.<br \/>\nOn indique \u00e9galement que les entr\u00e9es et sorties seront ignor\u00e9es: <em>{ stdio: &lsquo;ignore&rsquo; }<\/em>.<\/p>\n<p>Il est bien s\u00fbr int\u00e9ressant de pouvoir effectuer une action particuli\u00e8re d\u00e8s que notre fils se termine. Ceci est possible gr\u00e2ce \u00e0 <em>.on(&lsquo;exit&rsquo;, function() { \/\/CODE } )<\/em>.<br \/>\nSoit avec l&rsquo;exemple pr\u00e9c\u00e9dent:<\/p>\n<pre>noProxy.on('exit', function (code) {\r\nconsole.log('noProxy process exited with exit code '+code);\r\n});<\/pre>\n<p>Concernant les entr\u00e9es\/sorties, il est possible de laisser le processus \u00e9crire dans celles du processus parent en sp\u00e9cifiant cette fois:<em> { stdio: &lsquo;inherit&rsquo; }<\/em>.<br \/>\nUn autre point utile consiste \u00e0 r\u00e9cup\u00e9rer le contenu de la sortie standard du processus fils.<br \/>\nPour ce faire, on utilise les options suivantes: <em>[&lsquo;ignore&rsquo;, &lsquo;stream&rsquo;, &lsquo;ignore&rsquo;]<\/em>.<br \/>\nstdin et stderr sont ignor\u00e9s, seule reste stdout.<br \/>\nOn peut donc r\u00e9cup\u00e9rer les donn\u00e9es via <em>.stdout.on(&lsquo;data&rsquo;, function (data) { \/\/CODE } )<\/em> , o\u00f9 data contient les donn\u00e9es.<br \/>\nPour reprendre l&rsquo;exemple de npm, on peut ainsi r\u00e9cup\u00e9rer la valeur de la variable de configuration proxy et la stocker dans une variable locale proxySave<\/p>\n<pre>var getProxy = spawn(node, [npm, 'config', 'get', 'proxy']\r\n, ['ignore', 'stream', 'ignore']);\r\ngetProxy.stdout.on('data', function (data) {\r\nproxySave = data.toString().trim();\r\n});<\/pre>\n<p>Voil\u00e0 pour les principales infos concernant spawn. Pour en savoir plus, direction la <a href=\"http:\/\/nodejs.org\/api\/child_process.html\">doc officielle<\/a> ;).<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Un petit mot sur la fa\u00e7on de cr\u00e9er des processus fils sous node. Pas compliqu\u00e9 et bien pratique, pour r\u00e9aliser le cas de test d&rsquo;une nouvelle fonctionnalit\u00e9 de npm par exemple. Regardons le prototype: child_process.spawn(command, [args], [options]) command correspond au programme appel\u00e9, ls, grep ou autre&#8230; [args] est un tableau contenant tous les arguments qui &hellip; <a href=\"https:\/\/www.unicoda.com\/?p=661\" class=\"more-link\">Continuer la lecture<span class=\"screen-reader-text\"> de &laquo;&nbsp;[NodeJs] Spawn ou la cr\u00e9ation de processus fils&nbsp;&raquo;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[13,27],"class_list":["post-661","post","type-post","status-publish","format-standard","hentry","category-code","tag-javascript","tag-nodejs"],"_links":{"self":[{"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/posts\/661","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=661"}],"version-history":[{"count":5,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/posts\/661\/revisions"}],"predecessor-version":[{"id":3756,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/posts\/661\/revisions\/3756"}],"wp:attachment":[{"href":"https:\/\/www.unicoda.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=661"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=661"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=661"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}