mi piacerebbe raggiungere i seguenti obiettivi:Rubino - set_trace_func sui processi biforcuta
Costruire una linea di comando di Ruby che registra alcuni eventi set_trace_func, poi invoca qualunque argomento rubino eseguibile si passa ad esso (diciamo rspec
). Gli eventi registrati vengono quindi trasferiti al comando invocato.
pseudo codice di myutility
:
set_trace_func() # Set some events here
exec(ARGV.join(' ')) # Execute argument passed
quindi chiamare come myutility rspec
.
Il mio obiettivo qui è quello di registrare effettivamente i punti di traccia sui comandi arbitrari (a condizione che utilizzino gli spessori di rubino).
cose che ho provato:
exec
non funziona, per ovvie ragioni (che sostituisce il processo del tutto).- popen, sistema, backtick. Questi iniziano un processo indipendente.
Posso usare qualche forma di IPC, ma questo assume il controllo sul comando che sto invocando con la mia utilità. Questo non è il caso; Mi piacerebbe accettare arbitrariamente argomenti eseguibili su Ruby.
È possibile? Una cosa che non ho guardato da vicino è drb, ma anche questo presuppone un'interferenza con argomenti esterni.
Impressionante. Stavo facendo ruby -r dalla riga di comando; non sapevo che exec lo permettesse. Questa è la risposta corretta. Una rapida domanda di follow-up: come posso farlo funzionare con comandi che invocano se stessi ruby? Come rspec. Così com'è ora attraverso un errore che dice che non può trovare rspec, naturalmente. –
come ricordo - rspec non invoca il ruby di default, ma può funzionare su un drb, inoltre puoi eseguire gli eseguibili 'spring'-ed – Vasfed
come per l'errore 'non trovato' - perché l'esecuzione senza shell dovrai risolvere script full path (o passando a 'which' before/in runner) – Vasfed