Я пытаюсь вызвать некоторые команды оболочки через очень маленькую программу на C ++.
Такие команды, как "git clone" или "rsync", для которых требуется пароль.
Например, поскольку git использует SSH, который является интерактивным, я не могу предоставить ему пароль.
Моя программа на данный момент выглядит следующим образом:
#include <iostream>
#include <string>
std::string ExecuteShellCommand(const std::string& cmd)
{
FILE* pipe = popen(cmd.c_str(), "r");
if (!pipe)
return std::string("ERROR");
char buffer[128];
std::string result = "";
while(!feof(pipe))
{
if(fgets(buffer, 128, pipe) != NULL)
result += buffer;
}
pclose(pipe);
return result;
}
int main()
{
ExecuteShellCommand("git clone ssh://someurl/somerepo.git");
return 0;
}
Выход:
ssh_askpass: exec (/ usr / libexec / ssh-askpass): такого файла или каталога нет
ssh_askpass: exec (/ usr / libexec / ssh-askpass): такого файла или каталога нет
ssh_askpass: exec (/ usr / libexec / ssh-askpass): такого файла или каталога нет
Есть ли способ, чтобы процесс запрашивал пароль, как если бы я выполнял команду прямо из командной строки?
Спасибо!
РЕДАКТИРОВАТЬ: В идеале я хотел бы сделать это непосредственно на Python или Shell, но моя программа должна читать различные структуры в C ++ (привязки Python вроде бы излишне), поэтому, поэтому я пытаюсь это в C ++.