|
Делюсь: запуск внешней программы + перехватывает её вывода + вкусняшки
|
|||
---|---|---|---|
#18+
Приветствую! Хочу поделиться процедурой для выполнения внешних программ с ожиданием их завершения (или прерыванием выполнения из callback-функции) и получением вывода, что полезно для логирования юнит писал и тестировал на Delphi 6 UNIT AppExecUtils Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186.
пример использования Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2021, 11:58 |
|
Делюсь: запуск внешней программы + перехватывает её вывода + вкусняшки
|
|||
---|---|---|---|
#18+
мой код в отличие от многих примеров с перехватом вывода не виснет при убитии вызванного процесса, стоило мне дня напряжённого дебага ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2021, 12:03 |
|
Делюсь: запуск внешней программы + перехватывает её вывода + вкусняшки
|
|||
---|---|---|---|
#18+
Спасибо. Надо было ещё многопоточность добавить. :) Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2021, 12:43 |
|
Делюсь: запуск внешней программы + перехватывает её вывода + вкусняшки
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам Спасибо. Надо было ещё многопоточность добавить. :) +1 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2021, 12:50 |
|
Делюсь: запуск внешней программы + перехватывает её вывода + вкусняшки
|
|||
---|---|---|---|
#18+
Кроик Семён, проверил - все работает как надо, респект! ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2021, 13:19 |
|
Делюсь: запуск внешней программы + перехватывает её вывода + вкусняшки
|
|||
---|---|---|---|
#18+
Softologic Кроик Семён, проверил - все работает как надо, респект! какая версия Delphi? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2021, 13:52 |
|
Делюсь: запуск внешней программы + перехватывает её вывода + вкусняшки
|
|||
---|---|---|---|
#18+
Кроик Семён Код: pascal 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2021, 13:59 |
|
Делюсь: запуск внешней программы + перехватывает её вывода + вкусняшки
|
|||
---|---|---|---|
#18+
_Vasilisk_И какой смысл в callback передавать ProcessId? по ProcessID можно узнать, например, путь к EXE-файлу, если был запущен без указания абсолютного пути и всякое другое, мало ли Изначально думал организовать "прибитие" процесса в callback-функции по таймаут, но потом передумал и добавил "var ADoTerminating: boolean" ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2021, 14:04 |
|
Делюсь: запуск внешней программы + перехватывает её вывода + вкусняшки
|
|||
---|---|---|---|
#18+
P.S. насчёт "else" - сижу и не знаю, зачем это было написано. В пятницу работал "в потоке", торопясь успеть до выходных ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2021, 14:17 |
|
Делюсь: запуск внешней программы + перехватывает её вывода + вкусняшки
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2021, 14:33 |
|
Делюсь: запуск внешней программы + перехватывает её вывода + вкусняшки
|
|||
---|---|---|---|
#18+
На этот случай ставят второй TerminateProcess. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2021, 14:48 |
|
Делюсь: запуск внешней программы + перехватывает её вывода + вкусняшки
|
|||
---|---|---|---|
#18+
04.10.2021 14:48, ну я пишет: > На этот случай ставят второй TerminateProcess. не. делают цикл. бесконечный. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2021, 14:50 |
|
Делюсь: запуск внешней программы + перехватывает её вывода + вкусняшки
|
|||
---|---|---|---|
#18+
Жалко было на CreateProcess отдельный try..finally ? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2021, 15:27 |
|
Делюсь: запуск внешней программы + перехватывает её вывода + вкусняшки
|
|||
---|---|---|---|
#18+
DmSer Жалко было на CreateProcess отдельный try..finally ? А разве Windows-API - функции могут вываливаться с Exception? Они же для Си-кода спроектированы , возвращают статус / и код ошибки отдельной функцией ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2021, 16:11 |
|
Делюсь: запуск внешней программы + перехватывает её вывода + вкусняшки
|
|||
---|---|---|---|
#18+
Кроик Семён А разве Windows-API - функции могут вываливаться с Exception? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2021, 20:52 |
|
Делюсь: запуск внешней программы + перехватывает её вывода + вкусняшки
|
|||
---|---|---|---|
#18+
Вы StdOutput и StdError в один поток выводите? ИМХО, не очень эстетично. Хотя, конечно, StdError мало кто использует, но вдруг. Полезно еще код возврата отдавать. GetExitCodeProcess(); ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2021, 21:16 |
|
Делюсь: запуск внешней программы + перехватывает её вывода + вкусняшки
|
|||
---|---|---|---|
#18+
Кроик Семён DmSer Жалко было на CreateProcess отдельный try..finally ? А разве Windows-API - функции могут вываливаться с Exception? Они же для Си-кода спроектированы , возвращают статус / и код ошибки отдельной функцией Я не про exception. Просто немного режут глаз вызовы CloseHandle(0) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2021, 23:38 |
|
Делюсь: запуск внешней программы + перехватывает её вывода + вкусняшки
|
|||
---|---|---|---|
#18+
shalamyansky, код возврата ... может и нужен, я подумаю. За подсказку с GetExitCodeProcess отдельное спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2021, 03:22 |
|
|
start [/forum/topic.php?fid=58&msg=40101795&tid=2036979]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
others: | 16ms |
total: | 165ms |
0 / 0 |