|
|
|
Запустить с Delphi консольное приложение и считать его вывод
|
|||
|---|---|---|---|
|
#18+
Добрый день. Столкнулся с непонятной проблемой. Из дельфи вызываю консольное приложение и считываю его вывод. Проблема в том, что в компилированной версии работает не стабильно, случается что программа просто зависает и дальше не идет. Если запускаю напрямую из дельфи, то при работе консольной программы выходит сообщение отладчика в асемблере и после последующего нажати Run все продолжается как и должно. С консоли читаю так: Код: 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. В коде вызываю метод таким образом: Код: pascal 1. 2. 3. Так же впомогательный методы: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Может кто-нибудь подскажет в какую сторону копать? Заранее благодарен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2011, 17:20 |
|
||
|
Запустить с Delphi консольное приложение и считать его вывод
|
|||
|---|---|---|---|
|
#18+
Zmiyслучается что программа просто зависает и дальше не идет как минимум два места вижу: 1. консольная прога не умирает, и ты в вечном цикле с вечной Application.ProcessMessages. 2. цикл чтения из пайпы, если начитывается не меньше чем размер буфера, то повторное чтение, а там уже нету байтов и висим ... OemToAnsi - Obsolete. з.ы. ну и я бы в потоке начитывал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2011, 18:07 |
|
||
|
Запустить с Delphi консольное приложение и считать его вывод
|
|||
|---|---|---|---|
|
#18+
Пример из DelphiWorld: Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2011, 22:56 |
|
||
|
Запустить с Delphi консольное приложение и считать его вывод
|
|||
|---|---|---|---|
|
#18+
demian111, То есть ее надо самому убивать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2011, 11:07 |
|
||
|
Запустить с Delphi консольное приложение и считать его вывод
|
|||
|---|---|---|---|
|
#18+
bk0010, В 7й версии дельфи не билдится. Говорит Types of actual and formal var parameters must be identical В строке: Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2011, 11:28 |
|
||
|
Запустить с Delphi консольное приложение и считать его вывод
|
|||
|---|---|---|---|
|
#18+
Разве nil var параметр? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2011, 11:39 |
|
||
|
Запустить с Delphi консольное приложение и считать его вывод
|
|||
|---|---|---|---|
|
#18+
В статье по крайней мере такой код. Кажется он не для 7й версии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2011, 12:41 |
|
||
|
Запустить с Delphi консольное приложение и считать его вывод
|
|||
|---|---|---|---|
|
#18+
Zmiy, если вызов консольного приложения не требует интерактивной с ней работы, а просто консольная программа что-то выполняет на основании параметров, то я-бы перенаправил её вывод в файл и после завершения считывал-бы весь файл. Как Вам такой вариантец? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2011, 14:15 |
|
||
|
Запустить с Delphi консольное приложение и считать его вывод
|
|||
|---|---|---|---|
|
#18+
Можно и в файл, но тогда встает вопрос как определить что запись в файл прошла успешно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2011, 14:27 |
|
||
|
Запустить с Delphi консольное приложение и считать его вывод
|
|||
|---|---|---|---|
|
#18+
Zmiy, Ну, раз есть возможность выбора вариантов взаимодействия - это ж супер! :) Можно задействовать различные варианты ipc, начиная с обмена сообщениями и dde. А если объем данных велик - можно в к-н субд писать. Вопросы синхронизации в последнем случае решаются автоматически, механизмом транзакций. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2011, 15:04 |
|
||
|
Запустить с Delphi консольное приложение и считать его вывод
|
|||
|---|---|---|---|
|
#18+
ZmiyМожно и в файл, но тогда встает вопрос как определить что запись в файл прошла успешно? Методом попытки открытия файла в режиме эксклюзивного доступа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2011, 15:06 |
|
||
|
Запустить с Delphi консольное приложение и считать его вывод
|
|||
|---|---|---|---|
|
#18+
Zmiybk0010, В 7й версии дельфи не билдится. Говорит Types of actual and formal var parameters must be identical В строке: Код: plaintext 1. Заведите переменную типа POverlapped, присвойте ей nil и замените nil в функции на нее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2011, 22:51 |
|
||
|
Запустить с Delphi консольное приложение и считать его вывод
|
|||
|---|---|---|---|
|
#18+
ZmiyМожно и в файл, но тогда встает вопрос как определить что запись в файл прошла успешно? Zmiy, запись в файл пройдёт успешно, не переживайте, потому что не Вы будете писать в файл, а система. Т.е. вывод будет перенаправлен с консоли в файл. Вам-же нужно просто дождаться завершения исполнения консольного приложения и считать полученный файл. Надеюсь Вы знаете КАК нужно написать строку исполнения, чтобы вывод пошёл в файл ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2011, 06:12 |
|
||
|
Запустить с Delphi консольное приложение и считать его вывод
|
|||
|---|---|---|---|
|
#18+
А можно ли получить вывод из программы с псевдографическим интерфейсом, таких как FAR Manager ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2011, 12:38 |
|
||
|
Запустить с Delphi консольное приложение и считать его вывод
|
|||
|---|---|---|---|
|
#18+
ЧовайохояА можно ли получить вывод из программы с псевдографическим интерфейсом, таких как FAR Manager ?Если просто перенаправить вывод в файл, то файл создается пустой ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2011, 12:52 |
|
||
|
Запустить с Delphi консольное приложение и считать его вывод
|
|||
|---|---|---|---|
|
#18+
Спасибо всем, в итоге заработал такой вариант: Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2011, 13:53 |
|
||
|
Запустить с Delphi консольное приложение и считать его вывод
|
|||
|---|---|---|---|
|
#18+
Код: 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. Подправит чуток для XE3... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2013, 12:10 |
|
||
|
Запустить с Delphi консольное приложение и считать его вывод
|
|||
|---|---|---|---|
|
#18+
dima70, Последний пример не работает на Delphi Tokyo 10.2, валится на "if CreateProcess..." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2018, 15:08 |
|
||
|
Запустить с Delphi консольное приложение и считать его вывод
|
|||
|---|---|---|---|
|
#18+
avlaxoft, естественно падает. Ведь DosApp объявлен как string, т.е. в Delphi 10.2 это unicode-строка (1 символ - 2 байта). А в строке "if CreateProcess" идет приведение DosApp к PChar (1 символ - 1 байт). Доработайте немного код и он заработает :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2018, 23:01 |
|
||
|
Запустить с Delphi консольное приложение и считать его вывод
|
|||
|---|---|---|---|
|
#18+
Хотя конечно я погорячился, не подумав. pchar это же PWideChar))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2018, 23:05 |
|
||
|
Запустить с Delphi консольное приложение и считать его вывод
|
|||
|---|---|---|---|
|
#18+
asutp2PChar (1 символ - 1 байт). Не хочу тебя разочаровывать, но PChar там тоже юникодский, 1 символ = 2 байта. И что хуже всего: CreateProcess должен бы использоваться в юникодной версии (АКА CreateProcessW), так что проблема не в нём. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2018, 23:09 |
|
||
|
Запустить с Delphi консольное приложение и считать его вывод
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, это я понял через минуту после написания своего поста)))) прочитай пост выше своего))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2018, 01:35 |
|
||
|
Запустить с Delphi консольное приложение и считать его вывод
|
|||
|---|---|---|---|
|
#18+
asutp2это я понял через минуту после написания своего поста)))) прочитай пост выше своего))) Да, да, видел. Я тоже не чемпион мира по скоростному набору текста. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2018, 12:25 |
|
||
|
Запустить с Delphi консольное приложение и считать его вывод
|
|||
|---|---|---|---|
|
#18+
Обработку ошибок в примерах Пушкин конечно же выполняет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2018, 13:32 |
|
||
|
Запустить с Delphi консольное приложение и считать его вывод
|
|||
|---|---|---|---|
|
#18+
Если кому ещё интересно: вот работающий пример (сорри за лишние комментарии, некогда было код причёсывать...): Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2018, 13:05 |
|
||
|
|

start [/forum/topic.php?fid=58&fpage=91&tid=2040179]: |
0ms |
get settings: |
6ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
141ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 197ms |
| total: | 412ms |

| 0 / 0 |
