Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

deal with createTempFile for a process #125

Closed
igrishaev opened this issue Feb 15, 2018 · 2 comments
Closed

deal with createTempFile for a process #125

igrishaev opened this issue Feb 15, 2018 · 2 comments
Assignees

Comments

@igrishaev
Copy link
Collaborator

No description provided.

@igrishaev
Copy link
Collaborator Author

igrishaev commented Jul 31, 2020

Когда мы запускаем процесс драйвера, то направляем его выхлоп во временные файлы:

 (.redirectOutput pb (java.io.File/createTempFile "driver.out" ".log"))
 (.redirectError pb (java.io.File/createTempFile "driver.err" ".log"))

Минус в том, что мы пишем что-то на диск, даже если нас не просили. Я сделал так, потому что натыкался на проблему с обычным Runtime/exec: если не поглощать stdout процесса, он зависает.

  • Выяснить, справедливо ли это для процесса из ProcessBuilder (судя по всему, да).
  • Предоставить опции для логов драйвера. При запуске можно передвать ключи :log-stdout и :log-stderr, в которых строковые пути к файлам.
  • Если пути заданы, направить выхлоп процесса в эти файлы как в примере выше. Для этого обернуть строковый путь в io/file, и желательно, чтобы была дозапись в файл через append.
  • Если путь не задан, редиректить выхлоп в NullOutputStream. Судя по всему, этот стрим доступен из Apache Commons, от которого зависит clj-http, т.е. новая зависимость не понадобится.
  • добавить описание в readme

ссылки:

https://commons.apache.org/proper/commons-io/javadocs/api-2.4/org/apache/commons/io/output/NullOutputStream.html

https://stackoverflow.com/questions/691813/is-there-a-null-outputstream-in-java

https://stackoverflow.com/questions/3285408/java-processbuilder-resultant-process-hangs

https://bjurr.com/runtime-exec-hangs-a-complete-solution/

@igrishaev
Copy link
Collaborator Author

Если NullOutputStream недоступен без лишних телодвижений, написать свой через reify. В нем все методы write просто ничего не делают. Пример на джаве:

https://alvinalexander.com/java/jwarehouse/commons-io-2.0/src/main/java/org/apache/commons/io/output/NullOutputStream.java.shtml

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants