41 lines
861 B
CoffeeScript
41 lines
861 B
CoffeeScript
|
|
||
|
fs = require 'fs'
|
||
|
|
||
|
timeout = require './timeout'
|
||
|
|
||
|
|
||
|
# Read from pipe files until they get closed/deleted
|
||
|
#
|
||
|
# @param dir String path to tmp files
|
||
|
# @param max_wait Number millisecond timeout value
|
||
|
#
|
||
|
# @return Object {stderr, stdout, status}
|
||
|
|
||
|
module.exports = (dir, max_wait) ->
|
||
|
|
||
|
t_limit = Date.now() + max_wait
|
||
|
|
||
|
until read
|
||
|
try
|
||
|
read = true if fs.readFileSync(dir + '/done').length
|
||
|
timeout t_limit, 'Process execution timeout or exit flag read failure'
|
||
|
|
||
|
until deleted
|
||
|
try
|
||
|
fs.unlinkSync dir + '/done'
|
||
|
deleted = true
|
||
|
timeout t_limit, 'Can not delete exit code file'
|
||
|
|
||
|
result = {}
|
||
|
for pipe in ['stdout', 'stderr', 'status']
|
||
|
result[pipe] = fs.readFileSync dir + '/' + pipe, encoding: 'utf-8'
|
||
|
read = true
|
||
|
fs.unlinkSync dir + '/' + pipe
|
||
|
|
||
|
try
|
||
|
fs.rmdirSync dir
|
||
|
|
||
|
result.status = Number result.status
|
||
|
|
||
|
result
|