2012-11-11 5 views
1

Ruby에서 ARGV의 핵심은 무엇입니까?Ruby에서 ARGV의 핵심은 무엇입니까?

ruby ex1.rb 

내가

ruby ex1.rb blah blah blah 
를 입력하는 데 필요한 첫 번째, 두 번째 및 세 번째 변수에 넣어 : 때 내가 할 필요가있는 파일을 실행하려면이 점을 무엇

first, second, third = ARGV 
puts "The script is called: #{$0}" 
puts "Your first variable is: #{first}" 
puts "Your second variable is: #{second}" 
puts "Your third variable is: #{third}" 

프로그램을 실행하는 사람 모두에게 이점이 있습니까? 그들은 그것이 실행 파일이라고 가정하기 때문에 어쨌든 그것을 할 수 없습니다 :

user = ARGV.first 
prompt = '> ' 

puts "Hi #{user}, I'm the #{$0} script." 
puts "I'd like to ask you a few questions." 
puts "Do you like me #{user}?" 
print prompt 
likes = STDIN.gets.chomp() 

puts "Where do you live #{user}?" 
print prompt 
lives = STDIN.gets.chomp() 

puts "What kind of computer do you have?" 
print prompt 
computer = STDIN.gets.chomp() 

puts <<MESSAGE 
Alright, so you said #{likes} about liking me. 
You live in #{lives}. Not sure where that is. 
And you have a #{computer} computer. Nice. 
MESSAGE 

누군가이 설명해 주시겠습니까?

+4

"실행 파일이라고 생각하기 때문에 어쨌든 할 수는 없습니다"라는 생각의 결함을 보여줍니다. 실행 가능하다면 어떤 차이가 있습니까? 이는 OS에서 설정되는 약간의 값일뿐 스크립트가 매개 변수를 허용 할 수 있는지 여부에는 영향을 미치지 않습니다. 아마도 당신은 스크립트가 GUI로 시작되고 사용된다는 것을 의미했을 지 모르지만 스크립트가 시작 프로세스의 일부로 매개 변수를받을 수도 있습니다 ...이 모든 질문은 그릇된 것이라고 생각합니다. –

+2

주어진 예제에서 사용자 입력에 대한 응답으로 실행 중에 모든 입력이 수집됩니다. ARGV는 사용자 입력없이 실행 시작시 해당 데이터를 수집합니다. – JDS

+2

위의 코드에서 각 "청크"가 상당히 비싸다고 생각해보십시오. 10 초. 유형을 입력하고, 10 초를 기다리며, 입력하고, 10 초를 기다릴 것입니까? - 또는 - 입력 한 다음 30 초를 기다리시겠습니까? 필요한 경우가 아닌 초기 실행시 인수를 제공하는 것이 유용한 이유 중 한 가지 예가 있습니다. –

답변

78

Ruby에서 ARGV의 요지는 무엇입니까?

ARGV "요소에 하나씩 스크립트에 전달 된 인수가 들어 있습니다." ruby ex1.rb을하고 ruby ex1.rb blah blah blah에 입력해야 할 첫 번째, 두 번째 및 세 번째 변수에 넣어 : 때 당신이해야 할 파일을 실행하려면이 점을 무엇

. 정확한 지점입니다

, 같은 파일을 실행할 때 인수를 지정 할 수 있도록 :

ruby ex1.rb -a -b 3 

어떻게 모든 사람에서이 혜택 프로그램을 실행 않습니다를?

다른 명령 줄 프로그램에서도 동일한 이점을 얻을 수 있습니다. 즉, 사용자가 원하는 것을 미리 지정할 수 있으며 대화 형 CLI보다 스크립트가 쉽습니다.

나는 그것이 실행 파일이라고 가정하기 때문에 어쨌든 그것을 할 수 없다.

예, 가능합니다. 방금 사용자가 프로그램을 그런 방식으로 실행하는 방법에 대한 예제를 제공했습니다. 실행 여부에 관계없이 아무 것도 변경되지 않습니다.

+14

글쎄,이 질문에 대한 답변을 했습니까? [질문에 대한 답변을 upvote/accept하십시오] (http://meta.stackexchange.com/a/5235/158402)':) ' –

+0

나는 동일한 문제를 해결하기 위해 처음에는 약간의 혼란을 겪었지만 그것을 해결할 수있었습니다. 여기 ARGV 응답은 내 이해를 확인하는 데 도움이되었습니다. 내 유일한 질문은 "="ARGV.first "사용자의". first "는 무엇입니까? – Padawan

+0

@Padawan'ARGV'는 (내 대답의 링크 된 문서에서 지적한대로) 모든 인수의 배열이므로,'ARGV.first'가 첫 번째 인수를 얻습니다. 정규 사용되는 ['Array # first'] (http://ruby-doc.org/core/Array.html#method-i- first) 사용법은 여기를 참조하십시오. –

21

ARGV는 오랜 전통을 가지고 있으며, 대부분의 C 프로그램은 다음과 같은 메시지 있어야합니다 어디에 UNIX/POSIX 세계에서 온다 :

int main(int argc, char **argv) 
{ 
    return(0); 
} 

argc가 지정된 인수의 수를 나타내며, argv는 낮은 수준의 포인터 잠재적으로 여러 문자열 포인터 중 첫 번째 문자열로 이동합니다. argv이라는 이름은 다양한 형태로 붙어 있습니다.

명령 줄 인수는 개발자에게 매우 인기가 있지만, 일반적으로 개발자가 생각하는 것처럼 사용되지는 않습니다. 명명되지 않은 인수는 처리하기가 훨씬 어렵습니다. 그렇기 때문에 optparse과 같은 것들이 문제를 해결하는 데 도움이됩니다.

여기 the OptionParser documentation에서 예입니다 : 이것은 당신이 그들을 사용 후 훨씬 더 사용할 수있는 명령 줄 인수를 정의 할 수 있습니다

require 'optparse' 

options = {} 
OptionParser.new do |opts| 
    opts.banner = "Usage: example.rb [options]" 

    opts.on("-v", "--[no-]verbose", "Run verbosely") do |v| 
    options[:verbose] = v 
    end 
end.parse! 

p options 
p ARGV 

. 예를 들어, 다음과 같이 작동 할 것으로 기대합니다.

test_script --live "New York" --computer "Lenovo" --like 

이렇게하면 인수의 이름이 무엇인지 명확하게 알 수 있습니다.

+0

항상 역사를 아는 것이 유용합니다. 변수 이름 그 자체의 가능한 원점 –

12

rails, rake, gem 또는 bundle과 같은 일부 Ruby 명령 줄 유틸리티를 고려하십시오. 이들 중 어느 것도 최종 사용자 응용 프로그램 (웹 응용 프로그램 또는 GUI 응용 프로그램과 같은)은 아니지만 사용자가 상호 작용하는 Ruby로 작성된 프로그램입니다. 그들 모두는 인수를 :

$ rails new my_app 
$ rake tests 
$ gem install rails --no-rdoc --no-ri 
$ bundle update 

인수를 사용할 명령 줄 프로그램의 이러한 종류를 구현하기 위해 ARGV을 사용하는 것이 가능하다. 이 목적을 위해 종종 OptionParser standard library 또는 다른 도구를 사용하지만 ARGV는 이러한 도구가 위에 빌드 된 저급 모음입니다.

혹시 실행이 gem, rails, rake, 또는 bundle, 또는 루비로 작성하는 모든 명령 줄 개발자 도구, 당신은 ARGV에서 혜택을 것 한 그렇다면

!

4

ARGV의 요점은 스크립트를 사람의 입력없이 실행할 수 있으며 입력이 반복마다 다를 수 있다는 것입니다.

예를 들어 3 개의 다른 스크립트를 실행하여 3 개의 값을 얻을 수 있습니다. 이 값은이 스크립트로 전달 될 수 있으며 ARGV을 사용하여이 옵션의 값을 가져올 수 있습니다.

3

전자 메일과 암호를 묻는 스크립트를 실행하는 데 사용되었습니다. 100 개의 계정 중 하나에 로그인하는 데 사용되었습니다. 대부분의 Ruby 스크립트와 마찬가지로 명령 줄에서 실행합니다. 이것은 "실행 가능"한 것, 특히 클릭 한 아이콘이없는 것과 유사해야했습니다.

프로그램을 실행하면 Watir을 사용하여 이메일과 비밀번호를 묻습니다.

puts "Email of Account" 
account_email = gets.chomp 

puts "Enter Password" 
password = gets.chomp 

# code that logs me in 

그러나 ARGV를 통해 값을 받아들이는 것이 훨씬 더 빠르다는 것을 알았습니다.

account_email, password = ARGV 
# code that logs me in 

그럼 난 그냥

$ ruby my_script.rb [email protected] mypassword 

를 입력하고 Enter 키를 누르십시오 수 있습니다. 또한 콘솔에서 위쪽 화살표를 눌러 반복적으로 실행하거나 다른 이름과 암호로 최신 버전을 실행하여 스크립트를 신속하게 테스트 할 수 있습니다. 한 단계 더 복용

, 나는 많은 조합

마지막으로
ruby my_script.rb [email protected] mypassword 
ruby my_script.rb [email protected] otherpassword 

이 스크립트, 인수 모두를 실행할 수있는 쉘 스크립트를 만들어, 가끔은 내가 도망마다 당 설정의 수십을 설정하는 데 필요한 스크립트를 실행 한 다음 해당 스크립트를 여러 번 실행하십시오.그래서 쉽게 명령 줄에서 스크립트로 수십에게 변수를 삽입 할 수

ruby my_script.rb option1 option2 option3 option4 

나는 ARGV를 사용하여 아주 새로운 해요 및 그것을 사용하는 더 나은 방법을 배울 수 있도록 노력하겠습니다, 그러나 이것은 내가 매우 유용하다고 한 기능입니다 .

관련 문제