chciałbym osiągnąć następujące:Ruby - set_trace_func na rozdwojonych procesów
Budowanie Ruby narzędzia wiersza polecenia, który rejestruje pewne set_trace_func zdarzenia, a następnie wywołuje cokolwiek ruby-wykonywalny argumentem przechodzą do niej (słownie rspec
). Zarejestrowane zdarzenia przenoszą się następnie do wywoływanego polecenia.
Pseudo kod z myutility
:
set_trace_func() # Set some events here
exec(ARGV.join(' ')) # Execute argument passed
Następnie zadzwonić jako myutility rspec
.
Moim celem jest w rzeczywistości rejestrowanie śladów punktów na dowolnych poleceniach (o ile używają podkładek ruby).
Czego próbowałem:
exec
nie działa, z oczywistych powodów (zastępuje proces całkowicie).- popen, system, backticks. Rozpoczynają niezależny proces.
Mogę użyć jakiejś formy IPC, ale to przejmuje kontrolę nad poleceniem, które wywołuję za pomocą mojego narzędzia. Nie o to chodzi; Chciałbym zaakceptować dowolne argumenty wykonywalne w języku Ruby.
Czy to możliwe? Jedną rzeczą, której nie przyjrzałem się bliżej, jest drb, ale to też zakłada pewną ingerencję w zewnętrzne argumenty.
Awesome. Robiłem ruby -r z wiersza poleceń; nie wiedziałem, że exec to umożliwia. To jest poprawna odpowiedź. Jedno szybkie pytanie: jak mogę to wykonać za pomocą poleceń, które same wywołują ruby? Jak rspec. Obecnie stoi za błędem mówiąc, że nie może znaleźć rspec, naturalnie. –
o ile pamiętam - rspec domyślnie nie wywołuje ruby, ale może pracować nad drbem, możesz też uruchamiać 'wiosenny' plik wykonywalny – Vasfed
jak w przypadku błędu "nie znaleziono" - ponieważ działa bez powłoki musisz rozwiązać Skryptuj pełną ścieżkę samodzielnie (lub przechodząc do 'which' before/in runner) – Vasfed