:: Visual Foxpro, Foxpro for DOS
Как перехватить stdout/stderr при вызове внешней программы?
kvichans
Автор

Сообщений: 307
Откуда: Москва
Дата регистрации: 19.01.2006
Код на фоксе может вызывать внешнюю консольную программу. Может дождаться ее завершения.
А как перехватить от нее потоки stdout и stderr?

Посмотрел в сторону win32 - очень заморочно. Может есть готовые решения?

Задача в целом: передать часть функций в Питон. Буду признателен за советы в этом направлении.


------------------
Андрей, FoxPro с 2003 года
Ratings: 0 negative/0 positive
Re: Как перехватить stdout/stderr при вызове внешней программы?
PaulWist

Сообщений: 14618
Дата регистрации: 01.04.2004
В решениях есть пример от Андрюхи Петрова, но довести его ума у меня вместе с автором не получилось.

Вышел из положения через консольную прогу на Дельфях, общение с фоксом через файл.


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: Как перехватить stdout/stderr при вызове внешней программы?
_vit

Сообщений: 5175
Дата регистрации: 29.07.2002
RUN dir > b.txt 2>&1

Не пойдет?
Ratings: 0 negative/1 positive
Re: Как перехватить stdout/stderr при вызове внешней программы?
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
kvichans
Буду признателен за советы в этом направлении.
Поменять "способ общения" с потоков ввода/вывода на файлы, или какие IPC средства, или, ещё лучше, на HTTP или на худой конец на просто tcp-сокеты. Думаю питон это всё умеет вполне. Нельзя лезть в саму утилиту - значит написать обёртку на том языке какой знаешь, и где есть родная поддержка и потоков и чего-то из указанного. Геморроится с работой с потоками через апи - ну так себе удовольствие для фокса...


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Как перехватить stdout/stderr при вызове внешней программы?
medstrах

Сообщений: 1810
Дата регистрации: 10.06.2019
support.microsoft.com
Ratings: 0 negative/0 positive
Re: Как перехватить stdout/stderr при вызове внешней программы?
kvichans
Автор

Сообщений: 307
Откуда: Москва
Дата регистрации: 19.01.2006
_vit
RUN dir > b.txt 2>&1

Не пойдет?
Выглядит заманчиво. Работает как требовалось. Еще бы избавиться от мелькающего окна с консолью, но и так можно потерпеть


------------------
Андрей, FoxPro с 2003 года
Ratings: 0 negative/0 positive
Re: Как перехватить stdout/stderr при вызове внешней программы?
kvichans
Автор

Сообщений: 307
Откуда: Москва
Дата регистрации: 19.01.2006
medstrах
https://support.microsoft.com/en-us/help/190351/how-to-spawn-console-processes-with-redirected-standard-handles
Во-во. Посмотрел я на это и понял, что хакер во мне не родился


------------------
Андрей, FoxPro с 2003 года
Ratings: 0 negative/0 positive
Re: Как перехватить stdout/stderr при вызове внешней программы?
kvichans
Автор

Сообщений: 307
Откуда: Москва
Дата регистрации: 19.01.2006
PaulWist
...общение с фоксом через файл.
Igor Korolyov
Поменять "способ общения" ... на файлы.
Да, это как раз было понятно сразу. Попробую пока через RUN. Если не все получится, то буду изнутри Питона направлять потоки в файлы


------------------
Андрей, FoxPro с 2003 года
Ratings: 0 negative/0 positive
Re: Как перехватить stdout/stderr при вызове внешней программы?
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
От мелькающего окна с консолью должен спасти один из переключателей командной строки. Сейчас не помню какой. Что-то вроде "запустить в теневом режиме". Можно, кстати, использовать и RUN CMD <опции>. Или вообще запускать через батник.
Ratings: 0 negative/0 positive
Re: Как перехватить stdout/stderr при вызове внешней программы?
kvichans
Автор

Сообщений: 307
Откуда: Москва
Дата регистрации: 19.01.2006
Simple777
От мелькающего окна с консолью должен спасти один из переключателей командной строки. Сейчас не помню какой. Что-то вроде "запустить в теневом режиме". Можно, кстати, использовать и RUN CMD <опции>. Или вообще запускать через батник.

1. Возможно вы про дополнение к опции /N. Вот что про это в Справке
You can include an optional numeric value immediately after /N to specify how the Windows-based application is opened. 
Do not include any spaces between /N and the numeric value. 
The following table lists the numeric value you can include and describes the state of the Windows-based application when opened.
Value  Application attributes  
1 Active and normal size.
2 Active and minimized.
3 Active and maximized.
4 Inactive and normal size.
7 Inactive and minimized.
Но это только для "запустить и не ждать". Мне нужно дождаться и использовать результаты.
Где-то еще можно "теневой режим" настраивать?

2. Поясните "RUN CMD <опции>".


------------------
Андрей, FoxPro с 2003 года
Ratings: 0 negative/0 positive
Re: Как перехватить stdout/stderr при вызове внешней программы?
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
Через RUN можно запустить командную строку CMD.EXE

У CMD.EXE довольно много опций. Можно почитать о них :

CMD /? > info.txt
Ratings: 0 negative/0 positive
Re: Как перехватить stdout/stderr при вызове внешней программы?
kvichans
Автор

Сообщений: 307
Откуда: Москва
Дата регистрации: 19.01.2006
Simple777
"RUN CMD <опции>" это скорее всего тоже про общение файлами. В <опциях> можно указать где файлы с входными/выходными данными.


------------------
Андрей, FoxPro с 2003 года
Ratings: 0 negative/0 positive
Re: Как перехватить stdout/stderr при вызове внешней программы?
kvichans
Автор

Сообщений: 307
Откуда: Москва
Дата регистрации: 19.01.2006
Почитал, что пишет
CMD /?
Текст действительно большой. Не нашел полезного для своей задачи.

------------------
Андрей, FoxPro с 2003 года
Ratings: 0 negative/0 positive
Re: Как перехватить stdout/stderr при вызове внешней программы?
of63

Сообщений: 25244
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
А вот так?
o=CreateObject("Wscript.Shell")
x=o.Exec("cmd /c dir")
x.Terminate()
? x.StdOut.ReadAll
(c Piva)
Ratings: 0 negative/1 positive
Re: Как перехватить stdout/stderr при вызове внешней программы?
kvichans
Автор

Сообщений: 307
Откуда: Москва
Дата регистрации: 19.01.2006
of63
А вот так?
o=CreateObject("Wscript.Shell")
x=o.Exec("cmd /c dir")
x.Terminate()
? x.StdOut.ReadAll
(c Piva)
Ух ты! Выглядит здорово. Буду это осваивать

------------------
Андрей, FoxPro с 2003 года
Ratings: 0 negative/0 positive
Re: Как перехватить stdout/stderr при вызове внешней программы?
medstrах

Сообщений: 1810
Дата регистрации: 10.06.2019
Если можно нормально все запилить на винапи, то юзать всякие приблуды типа WSH это моветон



Исправлено 1 раз(а). Последнее : medstrах, 05.07.19 17:52
Ratings: 0 negative/0 positive
Re: Как перехватить stdout/stderr при вызове внешней программы?
medstrах

Сообщений: 1810
Дата регистрации: 10.06.2019
Если уж так хочется приблуд, то юзать Power shell логичней и правильней. WSH наверняка рано или поздно выпилят из системы
Ratings: 0 negative/0 positive
Re: Как перехватить stdout/stderr при вызове внешней программы?
of63

Сообщений: 25244
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
medstrах
Если можно нормально все запилить на винапи, то юзать всякие приблуды типа WSH это моветон

Иди и пили, ёпт. Где код?!
Ratings: 0 negative/0 positive
Re: Как перехватить stdout/stderr при вызове внешней программы?
medstrах

Сообщений: 1810
Дата регистрации: 10.06.2019
of63
Где код?!
Ты слабоумный?
Если мне нужен код, то я его пишу, а не выеб..ваюсь на форумах.
Ratings: 0 negative/0 positive
Re: Как перехватить stdout/stderr при вызове внешней программы?
of63

Сообщений: 25244
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Ястно, кода нет, очередной пишущий в стол...
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 21 Victoriacom  (Гостей: 20)

© 2000-2024 Fox Club 
Яндекс.Метрика