LINUX.ORG.RU

Как отправить текст в stdin консольной программы?

 , , ,


0

1

Есть консольная программа ./sample, которая получает параметр из консольного ввода. Например, так:

int number;
cin >> number;

Нужно запустить эту программу так, чтобы не вручную на клавиатуре вводить параметр (который запрашивается во время работы программы), а чтобы он был прописан в команде или брался из файла.

Как я только не пробовал. И напрямую:
echo "11" | ./sample
echo "11" > ./sample
./sample < echo "11"
./sample < cat "11"
./sample <( echo "11" )

И через файл, в котором прописан параметр:
./sample <parameter.txt
cat ./parameter.txt | ./sample
cat ./parameter.txt > ./sample

Вообще никак не работает.

Какой еще синтаксис применить?

★★★★★

Вообще никак не работает.

Это троллинг такой?

anonymous
()

Покажи минимальный (не) рабочий код.

anonymous
()

то что вы хотите, делается не так. А с помощью аргумента командной строки вызова программы (аргумент argv в функции main()) или с помощью реременной окружения, которую можно задать в скрипте Bash и ролучить в программе функцией getenv().

Partisan ★★★★
()
Ответ на: комментарий от Partisan

то что вы хотите, делается не так.

Вы еще скажите, что надо прикрутить СУБД, и брать из базы.

Скорее всего программа берет не из stdin, а из tty, и ему надо через expect.

vodz ★★★★★
()
Ответ на: комментарий от shdown

Блин, это я затупил. Там расчеты секунд 10 идут, а я не ожидался окончания. Поэтому вывода и не видел. Усё работает.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Xintrea

Может тебе поможет: моя библиотечка сниппетов (я их сначала тупо таскал файлами из «проекта» в «проект», потом мне это надоело, я оформил как билиотеку и опакетил. Теперь удобно.

Там есть простейшая работа с портами, демонизация, проверка уникальности процесса, простейший фифо/лифо, а самое главное — нормальная обработка параметров командной строки. Т.е. не нужно всей этой дичи с длиннючими case'ами таскать туда-сюда. Просто объявляешь структуру, в которой все хранится, плюс структуру с парметрами командной строки, справкой и ссылками на переменные, куда нужные данные будут помещаться. Умеет мультипараметры (в этом случае создаешь массив, и она по мене необходимости его расширяет) и инкрементирующие параметры (скажем, -v даст параметру verbose значение 1, а -vvv — 3).

Eddy_Em ☆☆☆☆☆
()

Запости тикет в багтрекер, здесь однозначно что-то не так

anonymous
()
Ответ на: комментарий от Eddy_Em

Не, там ввод должен быть из stdin а не через параметры командной строки.


Может тебе поможет: моя библиотечка сниппетов (я их сначала тупо таскал файлами из «проекта» в «проект», потом мне это надоело, я оформил как билиотеку и опакетил. Теперь удобно.

Благодарю, но без документации неюзабельно, ты же понимаешь.


а самое главное — нормальная обработка параметров командной строки

Чем твой велосипед лучше более популярных getopt/popt/boost::program_options?

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Xintrea

без документации неюзабельно

Там комментариев толпа.

Чем твой велосипед лучше

Хотя бы тем, что разбор командной строки требует лишь вот такого. Причем, в режиме DEBUG (если определен макрос EBUG) производится проверка на уникальность параметров, дважды один параметр ты не укажешь — получишь ошибку. Перечислять опции можно в любом порядке, при выводе они будут нормально отсортированы.

Eddy_Em ☆☆☆☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.