Perl и внешние программы - PullRequest
1 голос
/ 31 июля 2010

У меня есть Perl-программа и Си-программа.Я хочу запустить Perl-программу и зафиксировать возвращаемое значение C-программы.Чтобы было понятно: программа

C (a.out)

int main()
{
    printf("100");
    return 100;
}

Программа Perl:

print `ls`; #OK
print `a.out`; #No error but it does not print any output.

Есть идеи?Спасибо.

Ответы [ 3 ]

2 голосов
/ 31 июля 2010

Я не знаю Perl, но это работает в моей системе, поэтому никаких гарантий:

#!/usr/bin/perl

print "Running a.out now\n";
$exitCode = system("./a.out");
print "a.out returned:\n";
print $exitCode>>8; print "\n";

По той или иной причине system() возвращает возвращаемое значение в битах со значением 8 (поэтому 0 станет 2561 будет 512 ... 7 будет 1792 или что-то в этом роде), но мне было все равно, почему.

1 голос
/ 31 июля 2010

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

Попробуйте вместо этого:

printf("100\n");
0 голосов
/ 01 августа 2010

system () вернет код, указывающий, что возвратила ваша C-программа или была ли она прервана сигналом; предполагая, что позже это не так, вы можете сделать

$exitcode = system('a.out');
print "return code was ", $exitcode >> 8, "\n";

Если вы также хотите захватить вывод, вы можете использовать обратные пометки, и код будет в $? переменная.

$output = `a.out`;
$exitcode = $?;
print "return code was ", $exitcode >> 8, "\n";
print "output was:\n", $output;

Возможно, вы захотите использовать такой модуль, как IPC :: Cmd, который имеет несколько других функций, которые вам могут понадобиться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...