purebasic.info

PureBasic forum
Текущее время: Ср сен 19, 2018 10:31 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
СообщениеДобавлено: Ср фев 21, 2018 5:57 pm 
Не в сети
доцент

Зарегистрирован: Пн апр 06, 2015 3:43 pm
Сообщений: 30
Благодарил (а): 22 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Есть код:
Код:
1
2
3
4
5
6
7
8
9
10
11
Rp=RunProgram("cmd.exe"," /k c:\sdelete\sdelete -c d:","",#PB_Program_Read)
Output.s=""
If Rp
    While ProgramRunning(Rp)
      If AvailableProgramOutput(Rp)
        Debug ReadProgramString(Rp)
      EndIf
    Wend
 
    CloseProgram(Rp)
  EndIf


Компилятор ругается что такой Program не допустим... Хотя работает
Хочу вывести вывод процентов завершения sdelete64 в режиме "реального времени" в интерфейсе вызывающей программы. А он только в консоль и выводит.
Как можно получить данные?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пн фев 26, 2018 5:26 pm 
Не в сети
доцент

Зарегистрирован: Пн апр 06, 2015 3:43 pm
Сообщений: 30
Благодарил (а): 22 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Разобрался в проблеме:
Код:
1
Rp = RunProgram("cmd","/k c:\sdelete\sdelete64.exe -c d: ","",#PB_Program_Open|#PB_Program_Read)


Вот в этой строке и проблема - кроме чтения, нужно было еще и открытие. Причем к моему стыду - в справке даже пример есть.
В данной ситуации работает чтение построчно. Результат вывода:
SDelete v2.01 - Secure file delete
Copyright (C) 1999-2018 Mark Russinovich
Sysinternals - http://www.sysinternals.com
SDelete is set for 1 pass.

Но далее - когда программа переходит к процентам - бегущим в одной строке, вывод не идет до самого завершения программы:
Zeroing free space on D:\: 0%Cleaning free space on D:\: 1%Cleaning free space on D:\: 2%Cleaning free space on D:\: 3%
Ну и так до 100% и выдается одной строкой
D:\: 96%Cleaning free space on D:\: 97%Cleaning free space on D:\: 98%Cleaning free space on D:\: 99%Cleaning free space on D:\: 100% Cleaning MFT.../Cleaning MFT...-Cleaning MFT...\Free space cleaned on D:\
1 drive cleaned.


Как можно получить не одной строкой - а в режиме "реального времени" эти переключающиеся проценты?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пн фев 26, 2018 9:23 pm 
Не в сети
профессор

Зарегистрирован: Вс авг 31, 2014 12:11 am
Сообщений: 433
Благодарил (а): 50 раз.
Поблагодарили: 20 раз.
Пункты репутации: 10
Могу ошибаться, но по-моему здесь нужно использовать PIPE.
Посмотрите эту тему (код infratec'а). Может быть поможет.

Добавлено:
phantomjs.exe заменить на своё приложение. Для теста можно просто на cmd.exe


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Чт мар 01, 2018 2:31 pm 
Не в сети
доцент

Зарегистрирован: Пн апр 06, 2015 3:43 pm
Сообщений: 30
Благодарил (а): 22 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
knower писал(а):
Могу ошибаться, но по-моему здесь нужно использовать PIPE.
Посмотрите эту тему (код infratec'а). Может быть поможет.


Спасибо! Но не помогло. Все считывается до 0% и дальше не идет, хотя программа отрабатывает до конца.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт мар 02, 2018 2:41 pm 
Не в сети
доцент

Зарегистрирован: Пн апр 06, 2015 3:43 pm
Сообщений: 30
Благодарил (а): 22 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Что интересно код:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
Rp = RunProgram("cmd","/k c:\sdelete\sdelete64.exe -c r: ","",#PB_Program_Open|#PB_Program_Read)
If Rp
  *Buffer=AllocateMemory(5000)
  While ProgramRunning(Rp)
    If AvailableProgramOutput(Rp)
      ReadProgramData(Rp, *Buffer, 5000)
      EndIf
    Wend
    ShowMemoryViewer(*Buffer,5000)
    FreeMemory(*Buffer)
  CloseProgram(Rp)
EndIf
 



Выдает вот такой результат:
[CR][LF]
SDelete v2.01 - Secure file delete[CR][LF]
Copyright (C) 1999-2018 Mark Russinovich[CR][LF]
Sysinternals - http://www.sysinternals.com[CR][LF]
[CR][LF]
SDelete is set for 1 pass.[CR][LF]
Zeroing free space on R:\: 0%[CR]
Cleaning free space on R:\: 1%[CR]
Cleaning free space on R:\: 2%[CR]
Cleaning free space on R:\: 3%[CR]
Cleaning free space on R:\: 4%[CR]
Cleaning free space on R:\: 5%[CR]
Cleaning free space on R:\: 6%[CR]
Cleaning free space on R:\: 7%[CR]
Cleaning free space on R:\: 8%[CR]
Cleaning free space on R:\: 9%[CR]
; дабы не повторять - обрезал
Cleaning free space on R:\: 95%[CR]
Cleaning free space on R:\: 96%[CR]
Cleaning free space on R:\: 97%[CR]
Cleaning free space on R:\: 98%[CR]
Cleaning free space on R:\: 99%[CR]
Cleaning free space on R:\: 100%[CR]
[CR]
Cleaning MFT.../[CR]
Cleaning MFT...-[CR]
Cleaning MFT...\[CR]
Cleaning MFT...|[CR]
Cleaning MFT.../[CR]
Cleaning MFT...-[CR]
Cleaning MFT...\[CR]
Cleaning MFT...|[CR]
Cleaning MFT.../[CR]
Cleaning MFT...-[CR]
Cleaning MFT...\[CR]
Free space cleaned on R:\ [CR][LF]
1 drive cleaned.[CR][LF]
[CR][LF]

То есть данные таки поступают, но без перевода строки, лишь перевод каретки.
Как вытянуть из памяти такие хитрые строки в момент работы вызываемой программы?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт мар 02, 2018 6:55 pm 
Не в сети
профессор

Зарегистрирован: Чт сен 22, 2011 6:21 pm
Сообщений: 239
Благодарил (а): 32 раз.
Поблагодарили: 22 раз.
Пункты репутации: 0
Где-то у буржуев встречал подобную проблему(то-же вывод % и так-же CR без LF) предлагали перенаправить во временный файл и читать от-туда. (AvailableProgramOutput() - не понимает новую строку без LF)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вт мар 13, 2018 3:10 pm 
Не в сети
доцент

Зарегистрирован: Пн апр 06, 2015 3:43 pm
Сообщений: 30
Благодарил (а): 22 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Вывод в файл не помог.

Вывод в файл дохолит до строки:

SDelete is set for 1 pass. [CRLF]
Zeroing free space on R:\: 0%

И только потом, после окончание полного прохода программы (все 100%), уже к строке "Zeroing free space on R:\: 0%" добавляется [CR]
И далее выводятся все строки:
Zeroing free space on R:\: 0%[CR]
Zeroing free space on R:\: 1%[CR]
....
Zeroing free space on R:\: 99%[CR]
Zeroing free space on R:\: 100%[CR]
Free space cleaned on R:\[CRLF]

Я так понимаю что только с памяти программы можно вытянуть данные в сам момент работы. Только не могу понять как...


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: Bing [Bot] и гости: 9


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB