c++ и командная строка

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

lvv
Сообщения: 4
Зарегистрирован: 17 окт 2009, 10:58

Подскажите, как обратиться к командной строке, отличной от виндосовской cmd?
Ну, т.е., я хочу чтобы моя программка на c++ обращалась к командной строке gnuplot'а и говорила ему что делать, аналогично функции system.
Заранее спасибо.
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Я правильно понимаю, что ты хочешь обратится к командной строке не своей программы, а какой-то другой? Расскажи ещё более подробно чего именно ты хочешь добиться (лучше всего с примером), а также расскажи что такое gnuplot.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
lvv
Сообщения: 4
Зарегистрирован: 17 окт 2009, 10:58

В общем ситуация следующая.
Нужно, чтобы программа сделала некоторые расчеты и потом вывела график.
Gnuplot - это, как раз, программка с помощью которой не сложно построить график по дискретным данным, которые в процессе выполнения, моя программа записывает в некоторый файл.
В общем написав в конце своей программы эту строчку:

system("start C:\\Program\\Gnuplot\\bin\\wgnuplot");

я тем самым запустил командную строку windows'а (написав system) и запустил с ее помощью gnuplot (ну то есть в отдельном окне windows'а).
Теперь я могу там писать команды, чтобы он построил мой график, использую данные из файла в который они записаны, но это уже не относится к c++ (но если надо могу написать и это).
Дело в том, что он (gnuplot) работает как командная строка, вот я и подумал, что если c++ умеет обращаться к командной строке windows'а, то может, можно ему как-нибудь сказать, чтобы он использовал не ее, а командную строку gnuplot'а.
Таким образом, я бы смог сделать так, чтобы запустив программу c++, она, сделав расчеты, сама открыла бы gnuplot и сама написала бы ему команду, которая построит график.
Если, что могу выложить код программы.

Надеюсь, не очень запутанно объяснил, если, что могу еще раз попробовать :rolleyes:
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Во-первых, проинвестигейть свой gnuplot на наличие удобных параметров командной строки. Вполне возможно, что он умеет что-нибудь типа wgnuplot @comman_file. Просто очень часто подобные программы позволяют передать им в качестве параметра файл, содержащий список команд, которые следует выполнить.

Во-вторых, если первый вариант не пройдёт, то я поищу пример, который у меня где-то валялся, где на вход запущенной консольной программы подавался сформированный поток.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
lvv
Сообщения: 4
Зарегистрирован: 17 окт 2009, 10:58

Да-да, это он умеет (если я правильно понял), в частности именно так я строю нужный мне график. Записываю в файл1 данные, посчитанные программой, а в файл2 соответствующую команду, которая говорит ему построить график, используя файл1. Потом даю ему соответствующую команду в командной строке, которая говорит, чтобы открыл файл2. Но опять же - Я ввожу ему эту команду!
Аааа, или ты имеешь ввиду, что нужно найти файл который он при запуске автоматически читает и туда написать мою команду. Потому, что в начале запуска он сразу пишет некоторый текст?!
Я пробовал искать такой файл в ручную, но тщетно...
Или есть какие-то специальные приемы?
Я не очень понимаю, но наверное это и подразумевалось под "проинвестигейтить"?
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Я правильно понимаю, когда ты запускаешь gnuplot, у тебя появляется некое подобие командной строки, где ты можешь писать команды gnuplot'а? Так вот, я тебе предлагал посмотреть позволяет ли запускной файл wgnuplot.exe передать в качестве параметра имя файла, содержащего команды gnuplot'а.

То есть, например в gnuplot тебе нужно выполнить следующие команды:

Код: Выделить всё

load "my_file.dat"
draw_graphic
Вопрос был в следующем: смотрел ли ты документацию на gnuplot, можно ли эти команды поместить в отдельный файл commands.txt и затем передать его в качестве параметра запускному файлу wgnuplot.exe? Дело в том, что большая часть подобных утилит это позволяют. В подобном режиме они запускаются, читают команды из файла одна за одной и выполняют их, потом сами закрываются, даже не предлагая вводить команды с клавиатуры. Вполне возможно, что у тебя станет доступным такой или похожий вызов из С++:

Код: Выделить всё

system("start C:\\Program\\Gnuplot\\bin\\wgnuplot @commands.txt");
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
lvv
Сообщения: 4
Зарегистрирован: 17 окт 2009, 10:58

Урааа! Получилось!
Огромное спасибо! Там и в правду есть такой файл, ну то есть, его не было, но я создал и все заработало!
Теперь моя программка практически завершена!
Еще раз благодарю! :rolleyes:
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Да не за что. Обращайся :)

Самому приятно, что получилось дать дельный совет по программе, которую никогда в жизни не видел :)
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
atavin-ta
Сообщения: 585
Зарегистрирован: 30 янв 2009, 06:38

Не уверен, что получится, но попробуй конкатенировать с параметром systemа всё, что хотел запизхать в командную строку глуплота.
Вопрос: "Почему вы все сионисты? Нельзя ли писать на чём то другом?".
Ответ: "Писать можно на чём угодно. Но зачем же так себя ограничивать? Пиши на С!".
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

atavin-ta, ты прочитал только первый пост? Обсуждение не осилил, по всей видимости. Слушай, ты с Airhand не знаком, случаем? :)
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Ответить