Как передать несколько аргументов из C ++ в сценарий оболочки? - PullRequest
0 голосов
/ 14 октября 2019

script:

export HDF5_USE_FILE_LOCKING=FALSE

module load intel64/18.0up03

CMD="mpirun -genv I_MPI_PIN_DOMAIN socket"

EXC="/home/../modular_rom/bin/MPI_MM"

PARAMS="/home/../2D_ISOTROPIC/Snapshots.prm 10 2"

$CMD -np 200 -ppn 20 $EXC $PARAMS

c ++:

AssertThrow(args.size()==12,dealii::ExcMessage("number of parsed parameters has to be 12"));

const std::string snapshot_file = args[0];
const std::string correlation_file = args[1];
const std::string V_file = args[2];
const std::string U_file = args[3];
const std::string eigenvalue_file = args[4];
std::istringstream stream_n_modes(args[5]);
std::istringstream stream_grid_rows(args[6]);
std::istringstream stream_grid_cols(args[7]);
std::istringstream stream_block_size_m(args[8]);
std::istringstream stream_block_size_n(args[9]);
std::istringstream stream_snapshot_dim_1(args[10]);
std::istringstream stream_snapshot_dim_2(args[11]);

Выше приведен фрагмент исходного кода, который дал мне мой преподаватель. EXC='..' - это путь к исполняемому файлу. Что мне нужно сделать, это поместить 12 аргументов в PARAMS='...'. Как мне этого добиться? Я совершенно сбит с толку, поскольку "/home/../2D_ISOTROPIC/Snapshots.prm 10 2" выглядит как путь к файлуя.

1 Ответ

1 голос
/ 14 октября 2019

Параметры разделены пробелами. Итак, у вас уже есть 3 параметра: /home/../2D_ISOTROPIC/Snapshots.prm (параметр 1), 10 (параметр 2) и 2, параметр 3.

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

Посмотрите на это: https://www.geeksforgeeks.org/command-line-arguments-in-c-cpp/

...