2013-09-02 2 views
-3

У меня есть двоичный файл: temp.exeПередача каждой строки файла в качестве аргумента командной строки в двоичный файл

Этот бинарный (temp.exe) принимает два аргумента командной строки a и b.

У меня также есть файл agrsList.txt, который содержит:

a1 b1 
a2 b2 
a3 b3 
: : 
: : 
an bn 

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

PS: У меня нет доступа к исходному коду, поэтому я могу редактировать код и читать его.

Есть ли способ решить эту проблему (без написания сценария).

+1

Если в двоичном коде нет специального положения, чтобы принимать свои аргументы из файла, отформатированного точно так же, как и *, вы исключаете создание сценария, как будет работать гипотетическое решение? Магия? – Jon

+0

Это скорее вопрос bash, чем C или C++ один IMO – nijansen

+1

Ну, скрипт - это всего лишь набор ** команд оболочки **. Если вы хотите написать несколько команд в оболочке, вы также можете написать скрипт, и это будет лучшее решение. –

ответ

2

Вы можете использовать

xargs -rn 2 temp.exe < agrsList.txt 

-r означает temp.exe только работать, если есть параметры. Средство -n 2temp.exe работает с не более чем двумя параметрами. Если в agrsList.txt есть нечетное число слов, тогда temp.exe будет работать только с одним параметром, последним.

Для получения дополнительной информации см. man xargs.

+0

Или используйте '-a agrsList.txt' вместо перенаправления. – aragaer

+0

Номинальное животное: Спасибо. Я искал что-то в этом роде. @aragaer: Спасибо за предложение. – techbull

+0

@aragaer: Да, 'xargs -rn 2 -a agrsList.txt temp.exe', вероятно, лучший подход здесь. Разница в том, что '-a agrsList.txt' заставляет' xargs' читать аргументы из этого файла, сохраняя стандартный ввод как обычно для 'temp.exe'. При перенаправлении 'temp.exe' получает'/dev/null' для стандартного ввода; нет взаимодействия с пользователем. –

0

Что-то такое простое, как правило, лучше всего обрабатывать на языке «скриптинга», но это довольно прямое изображение в C++. Если вы читаете свой файл со стандарта в:

std::string args; 
while (std::getline(std::cin, args)) { 
    system(("temp " + args).c_str()); 
} 

должно быть все, что вам нужно. (Но вы не говорите, что вы хотите делать, если temp выходит из строя.)

Смежные вопросы