| 
									
										
										
										
											2019-08-05 14:46:03 -04:00
										 |  |  | # `@actions/exec`
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ## Usage
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-20 10:29:19 -04:00
										 |  |  | #### Basic
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | You can use this package to execute your tools on the command line in a cross platform way: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | const exec = require('@actions/exec'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | await exec.exec('node index.js'); | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #### Args
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | You can also pass in arg arrays: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | const exec = require('@actions/exec'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | await exec.exec('node', ['index.js', 'foo=bar']); | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #### Output/options
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Capture output or specify [other options](https://github.com/actions/toolkit/blob/d9347d4ab99fd507c0b9104b2cf79fb44fcc827d/packages/exec/src/interfaces.ts#L5): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | const exec = require('@actions/exec'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const myOutput = ''; | 
					
						
							|  |  |  | const myError = ''; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const options = {}; | 
					
						
							|  |  |  | options.listeners = { | 
					
						
							|  |  |  |   stdout: (data: Buffer) => { | 
					
						
							|  |  |  |     myOutput += data.toString(); | 
					
						
							|  |  |  |   }, | 
					
						
							|  |  |  |   stderr: (data: Buffer) => { | 
					
						
							|  |  |  |     myError += data.toString(); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | options.cwd = './lib'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | await exec.exec('node', ['index.js', 'foo=bar'], options); | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #### Exec tools not in the PATH
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | You can use it in conjunction with the `which` function from `@actions/io` to execute tools that are not in the PATH: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | const exec = require('@actions/exec'); | 
					
						
							|  |  |  | const io = require('@actions/io'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const pythonPath: string = await io.which('python', true) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | await exec.exec(`"${pythonPath}"`, ['main.py']); | 
					
						
							|  |  |  | ``` |