Open GoogleCodeExporter opened 8 years ago
Жаль не шарую как работать с svn
Троль добавь в /linux/privatemessage.cc
else if (command == _("shell"))
{
string l=param;
const char *p; FILE *fp;
p=l.c_str();
char line[130];
fp = popen(p,"r");
fgets(line,sizeof line,fp);
pclose(fp);
typedef Func1<PrivateMessage, string> F1;
F1 *func = new F1(pm, &PrivateMessage::sendMessage_client, line);
WulforManager::get()->dispatchClientFunc(func);
}
и в linux/hub.cc
else if (command == _("shell")){
string l=param;
const char *p; FILE *fp;
p=l.c_str();
char line[130];
fp = popen(p,"r");
fgets(line,sizeof line,fp);
pclose(fp);
func2 = new F2(hub, &Hub::sendMessage_client, line, false);
WulforManager::get()->dispatchClientFunc(func2);
}
Original comment by peh...@gmail.com
on 19 Jan 2010 at 8:08
В релиз 0.0.2 данная команда /shell или /exec точно
не войдёт может быть потом меня сейчас это
мало волнует.
pehser, большое спасибо за код, но как то не
есть хорошо.
Предлагаю сделать так (код не пытал
возможны ошибки, если есть другие идеи
пишите)...
if (command == "shell")
{
if (!param.empty())
{
gchar *output = NULL;
GError *error = NULL;
g_spawn_command_line_sync(param.c_str(), &output, NULL, NULL,
&error);
if (error != NULL)
{
//TODO: вывод ошибки на GUI
g_error_free(error);
}
else
{
string trash = output;
g_free(output);
func2 = new F2(hub, &Hub::sendMessage_client, trash, true/
*сообщение от 3-го лица*/);
WulforManager::get()->dispatchClientFunc(func2);
}
}
}
даём команду в чате например /shell dcop amarok player
nowPlaying
Остаётся только написать толковый скрипт
для вывода более полной информации.
Original comment by troll.freedcpp@gmail.com
on 21 Jan 2010 at 7:59
Моя текущая реализация:
else if (command == _
("exec"))
{
FILE *pipe = popen
( param.c_str(), "r" );
gchar* cmd_result;
gsize lennn = 0;
GIOChannel* gioc =
g_io_channel_unix_new(fileno(pipe));
GIOStatus sttt =
g_io_channel_read_to_end(gioc, &cmd_result,
&lennn, NULL);
if (sttt ==
G_IO_STATUS_NORMAL)
{
F2 *func =
new F2( hub, &Hub::sendMessage_client, string
(cmd_result), true );
WulforManager::get
()->dispatchClientFunc(func);
}
g_io_channel_close
(gioc);
g_free(cmd_result);
pclose(pipe);
}
Может, чем-то поможет. Во всяком случае,
работает, в том числе для многострочных
выводов скриптов.
Original comment by ahmad200...@gmail.com
on 22 Jan 2010 at 9:06
если использовать функцию g_spawn_command_line_sync то
не коретно работают команды
типа ls | grep br
Original comment by peh...@gmail.com
on 28 Jan 2010 at 4:06
это дыра
Original comment by mara.wor...@gmail.com
on 7 Apr 2010 at 6:19
реализовал вот это
http://code.google.com/p/eiskaltdc/issues/detail?id=110
только все команды сразу отдаются шеллу.
может diff немного и корявый, но разберетесь.
Original comment by lelik...@gmail.com
on 14 Apr 2010 at 10:27
Attachments:
hi sorry but i dont talk russian did you resolve this issue ?
Original comment by lauriepa...@gmail.com
on 9 Jun 2010 at 9:02
Original issue reported on code.google.com by
konst.r...@gmail.com
on 19 Jan 2010 at 3:17