2009-09-02 5 views

답변

2

입력으로 sort 명령을 실행했습니다. ok.rb을 입력으로 사용했습니다. 대신 ok.rb을 실행하고 출력을 입력으로 정렬하려고합니다.

루비를 모른 채,이 뭔가 같은 것으로 기대 : 난 그냥 내 리눅스 데스크톱에서이 작업을 시도했습니다

exec("ruby ok.rb | sort > output.txt") if fork.nil? 

그것은 잘 작동 :

ok.rb :

hasil = "input operator salah" 
puts hasil 

other.rb :

exec("ruby ok.rb | sort > output.txt") if fork.nil? 

실행 :

$ ruby other.rb 
$ cat output.txt 
input operator salah 

이 (정렬 정확히 많이 없었다, 그래서 당신은 출력의 한 줄을 제공했습니다.)

1

가장 깨끗한 방법이 될 것입니다 생산하지 위의 코드를 변경하려면 출력을 stdout에 직접 보내지 만 문자열을 빌드 한 다음 이것을 루비에서 정렬하여 파일에 인쇄합니다. 예를 들어 다음과 같이 :

hasil = "input operator salah" 

File.open("output.txt", "w") do |f| 
    f.puts hasil.split("\n").sort.join("\n") 
end 

루비 종류와 유닉스 종류를 교체하는 옵션이없는 경우

은 (어쩌면 종류는 예를 들어 당신이 쉽게 대체 할 수없는 다른 응용 프로그램에 배관있어 현실에 있었기 때문에 루비), 당신은 stdout에 쓰지 않고 응용 프로그램에 직접 코드를 작성할 수 있습니다. 어떤 IO에 글을 쓸 수 있도록 코드를 작성할 수도 있습니다.

def generate_output(out) 
    hasil = "input operator salah" 
    out.puts hasil 
end 

# If you decide to output the text directly to stdout (without sorting) 
generate_output(stdout) 

# If you instead want to pipe to sort: 
IO.popen("sort > output.txt", "w") do |sort| 
    generate_output(sort) 
end 
관련 문제