Ruby, exec, 시스템 및 %x() 또는 Backticks 간의 차이
다음 루비 방법의 차이점은 무엇입니까?
exec
,system
그리고.%x()
또는 백틱스
Ruby를 통해 터미널 명령을 프로그래밍 방식으로 실행하는 데 사용되는 것은 알지만, 이를 수행하는 데 세 가지 다른 방법이 있는 이유를 알고 싶습니다.
시스템.
메소드가 시스템 프로그램을 호출합니다.이 메서드에 대한 문자열 인수로 명령을 제공해야 합니다.예:
>> system("date")
Wed Sep 4 22:03:44 CEST 2013
=> true
호출된 프로그램이 현재를 사용합니다.STDIN
,STDOUT
그리고.STDERR
Ruby 프로그램의 개체입니다.사실, 실제 수익률은 다음 중 하나입니다.true
,false
또는nil
예제에서 날짜는 다음의 IO 개체를 통해 인쇄되었습니다.STDIN
메소드가 반환됩니다.true
프로세스가 0 상태로 종료된 경우false
프로세스가 0이 아닌 상태로 종료된 경우nil
실행이 실패한 경우
루비 2.6 기준, 합격exception: true
복귀하는 대신 예외를 제기할 것입니다.false
또는nil
:
>> system('invalid')
=> nil
>> system('invalid', exception: true)
Traceback (most recent call last):
...
Errno::ENOENT (No such file or directory - invalid)
또 다른 부작용은 전역 변수가$?
개체로 설정됩니다.이 개체는 호출된 프로세스의 프로세스 식별자(PID) 및 종료 상태를 포함하여 호출 자체에 대한 정보를 포함합니다.
>> system("date")
Wed Sep 4 22:11:02 CEST 2013
=> true
>> $?
=> #<Process::Status: pid 15470 exit 0>
백스틱스
Backticks('')는 시스템 프로그램을 호출하고 출력을 반환합니다.첫 번째 접근 방식과 달리 명령어는 문자열을 통해 제공되지 않고 백스틱 쌍 안에 배치하여 제공됩니다.
>> `date`
=> Wed Sep 4 22:22:51 CEST 2013
전역 변수$?
백트릭으로도 설정되어 있습니다.백스틱을 사용하여 문자열 보간을 사용할 수도 있습니다.
%x1500
사용.%x
백스틱 스타일의 대안입니다.출력도 반환됩니다.그것의 친척들처럼.%w
그리고.%q
괄호 스타일 구분 기호가 일치하는 경우에는 구분 기호가 있으면 됩니다.이것은 의미합니다.%x(date)
,%x{date}
그리고.%x-date-
모두 동의어입니다.백트릭처럼%x
문자열 보간을 사용할 수 있습니다.
집행인
현재 프로세스(Ruby 스크립트)를 사용하면 다음을 통해 호출되는 프로세스로 대체됩니다.exec
메서드는 문자열을 인수로 사용할 수 있습니다.이 경우 문자열은 셸 확장의 영향을 받습니다.둘 이상의 인수를 사용할 경우 첫 번째 인수가 프로그램을 실행하는 데 사용되며 다음은 호출될 프로그램에 대한 인수로 제공됩니다.
오픈3.popen3
때로는 필요한 정보가 표준 입력 또는 표준 오류에 기록되며 이러한 정보도 제어해야 합니다.다음은 유용한 기능입니다.
require 'open3'
Open3.popen3("curl http://example.com") do |stdin, stdout, stderr, thread|
pid = thread.pid
puts stdout.read.chomp
end
여기 이 답변을 바탕으로 한 흐름도가 있습니다.참고 항목, 터미널 에뮬레이트에 사용.
그들은 다른 일을 합니다. exec
현재 프로세스를 새 프로세스로 대체하고 다시는 돌아오지 않습니다. system
다른 프로세스를 호출하고 종료 값을 현재 프로세스로 반환합니다.백택스를 사용하면 다른 프로세스가 호출되고 해당 프로세스의 출력이 현재 프로세스로 반환됩니다.
제 경우엔 성공했습니다.
output = `nmap localhost`
이것은 당신의 출력을 변수에 저장하기 때문에 답은 시스템 대신 ''를 사용하는 것입니다.
언급URL : https://stackoverflow.com/questions/6338908/ruby-difference-between-exec-system-and-x-or-backticks
'source' 카테고리의 다른 글
세션을 종료하지 않고 오라클에서 단일 쿼리를 종료할 수 있습니까? (0) | 2023.06.26 |
---|---|
Git 저장소에 있는 모든 태그를 생성된 날짜까지 나열하려면 어떻게 해야 합니까? (0) | 2023.06.26 |
안드로이드 앱의 이름을 변경하는 방법은 무엇입니까? (0) | 2023.06.01 |
WPF에서 파일 선택 대화 상자는 어디에 있습니까? (0) | 2023.06.01 |
루비를 넣는 pvs. (0) | 2023.06.01 |