파이프에서 파일로

파이프에서 파일로

파일 설명자가 무엇인지, 필요한지 여부를 이해하는 데 약간의 혼란이 있습니다! Node.js에서 프로세스를 생성하고 그 출력을 출력 파일에 직접 쓰려고 합니다.

나는 내 문제가 유닉스 계열의 범위를 벗어난 언어에 특정하다는 것을 알고 있지만 내 문제는 언어보다는 시스템에 관한 어떤 것을 이해하지 못하는 데서 비롯된다고 믿습니다.

이것내가 스크립트에서 호출하는 함수입니다. 이렇게 불러도 될 줄 알았는데

require('child_process').spawn('./my_script.bash 1>out.txt')

하지만 행운은 없습니다! 스크립트가 실행되고 실행 중이라는 것을 알고 있습니다.

답변1

generate 명령은 읽을 수 있는 스트림을 반환하므로 유용한 작업을 수행하려면 이를 쓰기 가능한 스트림으로 파이프해야 합니다.

파이프에서 파일로

// the filed module makes simplifies working with the filesystem
var filed = require('filed')
var path = require('path')
var spawn = require('spawn')
var outputPath = path.join(__dirname, 'out.txt')

// filed is smart enough to create a writable stream that we can pipe to
var writableStream = filed(outputPath)

var cmd = path.join(__dirname, 'my_script.bash')
var args = [] // you can option pass arguments to your spawned process
var child = spawn(cmd, args)

// child.stdout and child.stderr are both streams so they will emit data events
// streams can be piped to other streams
child.stdout.pipe(writableStream)
child.stderr.pipe(writableStream)

child.on('error', function (err) {
  console.log('an error occurred')
  console.dir(err)
})

// code will be the exit code of your spawned process. 0 on success, a positive integer on error
child.on('close', function (code) {
  if (code !== 0) {
  console.dir('spawned process exited with error code', code)
    return
  }
  console.dir('spawned process completed correctly at wrote to file at path', outputPath)
})

위 예제를 실행하려면 아카이브 모듈을 설치해야 합니다.

npm install filed

stdout 및 stderr로 파이프

process.stdout 및 process.stderr은 모두 쓰기 가능한 스트림이므로 생성된 명령의 출력을 콘솔에 직접 파이프할 수도 있습니다.

var path = require('path')
var spawn = require('spawn')
var cmd = path.join(__dirname, 'my_script.bash')
var args = [] // you can option pass arguments to your spawned process
var child = spawn(cmd, args)

// child is a stream so it will emit events
child.stderr.pipe(process.stderr)
child.stdout.pipe(process.stderr)

child.on('error', function (err) {
  console.log('an error occurred')
  console.dir(err)
})

// code will be the exit code of your spawned process. 0 on success, a positive integer on error
child.on('close', function (code) {
  if (code !== 0) {
  console.dir('spawned process exited with error code', code)
    return
  }
  console.dir('spawned process completed correctly at wrote to file at path', outputPath)
})

관련 정보