¿Hay alguna manera de redirigir los datos impresos por io:format()
desde el shell erlang a un archivo? Sé que puedo abrir un archivo (IoDevice) y escribir datos directamente en él, pero requiere un cambio de código y no quiero hacerlo ahora.Redirigir la salida del shell erlang a un archivo
Respuesta
Simplemente ejecútelo con erl -noinput -s module function -s init stop > file
.
Aquí hay un ejemplo. código
Erlang:
-module(test).
-compile(export_all).
function() ->
io:fwrite("Hello world!~n").
Con cáscara:
$ erlc test.erl
$ erl -noinput -s test function -s init stop > test.txt
$ cat test.txt
Hello world!
También puede utilizar el argumento IODevice a Io: fwrite/3 y hacer que tenga el valor átomo de standard_io cuando Don No quiero que se dirija a algún archivo. De lo contrario, dele el archivo.
Consulte la sección "Entrada/Salida estándar" de la documentación de io module.
Cuando un proceso llama a io:format()
y funciones similares, el proceso envía mensajes de solicitud a su proceso group_leader. Entonces, un simple hack es abrir un archivo y establecerlo como group_leader de los procesos que producen el resultado. Aquí hay un ejemplo de redirigir la salida del proceso de shell a un archivo.
1> {ok, F} = file:open("z", [write]).
{ok,<0.36.0>}
2> group_leader(F, self()).
3> io:format("Where am I going to appear?~n").
4>
Esto sólo redirigir el proceso de shell actual, por lo que tendrá que establecer el group_leader para todos los procesos que le gustaría volver a dirigir al archivo.
La solución puede ser refinado por supuesto, por ejemplo, lanzando un proceso servidor, que proxies io mensajes de solicitud a los archivos rotados, etc.
Puede volver a compilar el código con un parse transformar, transforma las llamadas como
io:format("~p~n", "Hello world!")
en llamadas como
io:format(whereis(my_output_file), "~p~n", "Hello world!")
Plus es necesario agregar esto en su código de puesta en marcha, y ya está:
{ok, F} = file:open("file", [write]),
register(my_output_file, F),
- 1. ¿Cómo redirigir la salida del sistema() a un archivo?
- 2. ¿Cómo redirigir la salida del compilador gcc a un archivo?
- 3. ¿Cómo redirigir la salida de Valgrind a un archivo?
- 4. ¿Cómo redirigir la salida de DBMS_OUTPUT.PUT_LINE a un archivo?
- 5. ¿Cómo redirigir la salida del comando dd a/dev/null?
- 6. Erlang shell desde un navegador?
- 7. Redirigir la salida de grep al archivo
- 8. ¿Cómo puedo redirigir la salida del puerto COM de Windows a un archivo?
- 9. C# redirigir (canalizar) la salida del proceso a otro proceso
- 10. Escribir en el terminal después de redirigir la salida estándar a un archivo sin usar stderr?
- 11. ¿Puedo redirigir la salida de un programa a gvim?
- 12. Redirigir/almacenar salida de shell en variable GDB?
- 13. redirigir la salida estándar a syslog
- 14. enviar salida al archivo desde el script de shell
- 15. Registro de Java: ¿cómo redirigir la salida a un archivo de registro personalizado para un registrador?
- 16. Cómo redirigir la salida a un archivo cuyo nombre es la fecha y hora actual?
- 17. Redirigir la salida bash al nombre de archivo dinámico
- 18. salida strace tmux redirigida a un archivo
- 19. Erlang shell problem
- 20. ¿Es posible redirigir la salida de un archivo por lotes dentro del script?
- 21. glibc backtrace - no se puede redirigir la salida al archivo
- 22. ¿Cómo puedo redirigir la salida de la función a un archivo en Perl?
- 23. Redirigir la salida de registro de la consola Tomcat 7 a un archivo (Windows)
- 24. ¿Puedo redirigir la salida de Unicode de la consola directamente a un archivo?
- 25. Cómo redirigir la salida de la consola a un archivo de texto
- 26. ¿Cómo redirigir la salida de .exe a un archivo en python?
- 27. ¿Cómo puedo redirigir la salida estándar a un archivo en Perl?
- 28. Redirigir la salida de django manage.py (en Windows) a un archivo de texto
- 29. Salida del último comando de shell
- 30. Codificación incorrecta después de redirigir la salida `dir` a un archivo
¡Bonito hack! Podría ser bastante útil – gleber