2012-10-23 5 views
0

루비에서 파일을 생성 할 로컬 명령을 실행하고 싶습니다. 그런 다음 파일의 내용을 읽고 수정하고 싶습니다.루비 스레드가 대기하지 않습니다.

그러나 나는 항상 null이됩니다. 그러나 나는 내용을 수정할 수 없습니다,

exec "java -jar xx.jar --output main.txt"; 
content=IO.read('main.txt'); 
content="somethinkg:"+content; 
File.open('main.txt','w') do |f| 
    f.puts content 
end 

가 main.txt가 생성됩니다

는 코드입니다.

그렇다면 스레드로 인해 발생한 것 같습니다. main.txt을 읽을 때 java 명령이 완료되지 않았기 때문에 내용이 비어 있습니다.

t=Thread.new do 
    exec "java -jar xx.jar --output main.txt"; 
end 
t.join 
content=IO.read('main.txt'); 
puts content 
content="somethinkg:"+content; 
File.open('main.txt','w') do |f| 
    f.puts content 
end 

그러나 아무것도 변화하지, 난 아직 내용을 얻을 수 있습니다

은 그 때 나는이 시도했다.

무엇이 문제입니까?

+1

없이 그것을 시도 도움이 희망'간부 이후에는 코드가 모든 간부 스왑 때문에 실행되지 않습니다 exec' 메모리 시도 시스템 또는 – Viren

+0

@Viren 역 따옴표 연산자는 바로 소리 - 당신은 대답으로 추가해야한다, 나는 기초로부터 벗어났다 :) –

+0

@Viren :'system ("java ...")'대신에? – hguser

답변

0

난 당신이 here

이상 간부 에 루비 설명서를 확인 간부 인 후 코드가 그래서 코드를

t=Thread.new do 
    exec "java -jar xx.jar --output main.txt"; 
end 

그래서

실행되지 않을 경우 여기에 문제가 exec 명령 생각 이 후에 아무 것도 실행하지 마십시오.

시스템 또는 역 따옴표 명령으로 시도하십시오.

t=Thread.new do 
    system "java -jar xx.jar --output main.txt"; 
end 
t.join 
content=IO.read('main.txt'); 
puts content 
content="somethinkg:"+content; 
File.open('main.txt','w') do |f| 
    f.puts content 
end 

같은

뭔가가

+0

고마움, 나는 시도 할 것이다. – hguser

+0

왜 스레드가 귀찮은가요? 자식 프로세스가 종료 될 때까지 시스템 블록. – Catnapper

+0

@Catnapper 나는 알고있다. 그러나 코드의 유일한 부분이 있는지, 아니면 멀티 스레드 (multithread)에서 질문을 태그 한 이후로 결코 제안하지 않은 것이 다른 것인가? – Viren

관련 문제