Вчера я написал плагин PERL скрипт для Pidgin 2.10.9, работает на Windows 7, а также с помощью Strawberry Perl 5.10.1.5STDOUT из Pidgin плагин сценария
В основном на получении IM, он использует кавычку для вызова консольного приложения (написанного в .NET) и возвращает вывод консоли отправителю как IM.
Мне пришлось перезагрузить это утро, но с тех пор, как я перезагрузился, он прекратил работать.
Итак, я изменил обратные такты, чтобы использовать «захват». Это не сработало, но по крайней мере, дал мне эту ошибку:
(15:00:33) Plugin: Error: Error in IPC::System::Simple plumbing: "Can't dup STDOUT" - "Bad file descriptor" at (eval 12) line 53
Понятия не имею, что изменилось со вчерашнего дня до сегодняшнего дня, и спрашивает, если кто-нибудь знал, что может быть причиной ошибки?
Благодаря
Edit: Думал добавить свой код
use Purple;
#use IPC::System::Simple qw(system systemx capture capturex);
use IPC::System::Simple qw(capture capturex);
%PLUGIN_INFO = (
perl_api_version => 2,
name => "PlugIn",
version => "0.1",
summary => "AutoResp",
description => "PlugIn",
author => "Mark Watkin",
url => "http://",
load => "plugin_load",
unload => "plugin_unload"
);
sub plugin_init {
return %PLUGIN_INFO;
}
sub plugin_load {
my $plugin = shift;
Purple::Debug::info("PlugIn", "plugin_load()\n");
$data = "";
$conversation_handle = Purple::Conversations::get_handle();
Purple::Signal::connect($conversation_handle, "received-im-msg", $plugin, \&signal_chat_callback, $data);
}
sub plugin_unload {
my $plugin = shift;
Purple::Debug::info("PlugIn", "plugin_unload()\n");
}
sub signal_chat_callback {
# The signal data and the user data come in as arguments
my ($account, $sender, $message, $conv, $flags) = @_;
Purple::Debug::info("PlugIn", "Account Alias \"" . $account->get_alias() . "\"\n");
if($account->get_alias() eq "PlugIn")
{
Purple::Debug::info("PlugIn", "Request: \"" . $message . "\"\n");
if(!$conv)
{
Purple::Debug::info("PlugIn", "No conversation\n");
$conv = Purple::Conversation->new(1, $account, $sender);
}
$im = $conv->get_im_data();
$im->send("One moment please...");
my $query = "";
# eval {
# $query = capture("\"D:\\SourceCode\\PlugInNET\\bin\\Debug\\PlugInNET.exe\" \"" . $message . "\"");
# #$query = capture("\"D:\\SourceCode\\PlugInNET\\bin\\Debug\\PlugInNET.exe\"", "\"" . $message . "\"");
# #my $query = capture("D:\\SourceCode\\PlugInNET\\bin\\Debug\\PlugInNET.exe");
# #my $query = `\"D:\\SourceCode\\PlugInNET\\bin\\Debug\\PlugInNET.exe\" \"$message\"`;
# #my $query = `dir /b`;
# };
# if([email protected])
# {
# Purple::Debug::info("PlugIn", "Error: " . [email protected] . "\n");
# }
Purple::Debug::info("PlugIn", "Query: " . $query . "\n");
open (my $fh, "-|", "D:\\SourceCode\\PlugInNET\\bin\\Debug\\PlugInNET.exe \"$message\"") or die "Cannot run free, $ERRNO";
while (<$fh>)
{
Purple::Debug::info("PlugIn", "Read: Line " . $_ . "\n");
$query = $query . $_ . "\n";
}
close $fh;
Purple::Debug::info("PlugIn", "Query: " . $query . "\n");
if($query eq "")
{
$im->send("I'm sorry, my brain doesn't seem to be functioning at the moment");
} else {
@msgs = split(/-----------\n/, $query);
foreach(@msgs)
{
Purple::Debug::info("PlugIn", "Result Msg: \"" . $_ . "\"\n");
$im->send("<BODY>" . $_ . "</BODY>");
}
}
}
}
План должны был исправить пути, когда я имел это работает должным образом
Всегда «используйте» строгие правила и предупреждения, чтобы помочь найти ошибки. –