Как запустить браузер по умолчанию в Perl в любой операционной системе? - PullRequest
12 голосов
/ 15 января 2012

Я хочу открыть URL, такой как http://www.example.com/, в конце сценария Perl.Я не хочу получать к нему доступ через WWW :: Mechanize, но на самом деле показываю веб-страницу пользователю в графическом веб-браузере.

Есть способы сделать это в Mac (open URL) и Windows,но я хочу решение, которое работает в любой операционной системе, а не только в одной.

Ответы [ 3 ]

18 голосов
/ 15 января 2012

Второй удар по «открытому URL» на search.cpan вызывает Браузер :: Открыть :

use Browser::Open qw( open_browser );

my $url = 'http://www.google.com/';
open_browser($url);

Если ваша ОС не поддерживается, отправьте исправление или отчет об ошибке.

8 голосов
/ 15 января 2012

Вы можете использовать переменную $^O для идентификации платформы и использовать разные команды для каждой ОС.

Например:

sub open_default_browser {
  my $url = shift;
  my $platform = $^O;
  my $cmd;
  if    ($platform eq 'darwin')  { $cmd = "open \"$url\"";          } # Mac OS X
  elsif ($platform eq 'linux')   { $cmd = "x-www-browser \"$url\""; } # Linux
  elsif ($platform eq 'MSWin32') { $cmd = "start $url";             } # Win95..Win7
  if (defined $cmd) {
    system($cmd);
  } else {
    die "Can't locate default browser";
  }
}

open_default_browser("http://www.example.com/");
1 голос
/ 22 июля 2015

При установке модуля CPAN Браузер :: Открыть не является вариантом или нежелателен, Ответ Тараса предоставляет хорошую альтернативу, но может быть улучшена следующими способами:

  • обеспечивает надежную работу функции в Windows с URL-адресами, которые содержат метасимволы оболочки, такие как & и ^.
  • в Windows, добавить поддержку сред MSYS, Git Bash и Cygwin Unix-эмуляции
  • добавлена ​​поддержка дополнительных операционных систем, которые также имеют утилиту xdg-open, а именно все ОС, которые freedesktop.org -совместимы, т. Е. Используют графические интерфейсы на основе X Window, что включает Платформы Linux, такие как PC-BSD (на основе FreeBSD) и OpenSolaris.
# SYNOPSIS
#   openurl <url>
# DESCRIPTION
#   Opens the specified URL in the system's default browser.
# COMPATIBILITY
#   OSX, Windows (including MSYS, Git Bash, and Cygwin), as well as Freedesktop-compliant
#   OSs, which includes many Linux distros (e.g., Ubuntu), PC-BSD, OpenSolaris...
sub openurl {
  my $url = shift;
  my $platform = $^O;
  my $cmd;
  if    ($platform eq 'darwin')  { $cmd = "open \"$url\"";       }  # OS X
  elsif ($platform eq 'MSWin32' or $platform eq 'msys') { $cmd = "start \"\" \"$url\""; } # Windows native or MSYS / Git Bash
  elsif ($platform eq 'cygwin')  { $cmd = "cmd.exe /c start \"\" \"$url \""; } # Cygwin; !! Note the required trailing space.
  else { $cmd = "xdg-open \"$url\""; }  # assume a Freedesktop-compliant OS, which includes many Linux distros, PC-BSD, OpenSolaris, ...
  if (system($cmd) != 0) {
    die "Cannot locate or failed to open default browser; please open '$url' manually.";
  }
}

Предупреждение Cygwin: причудливо, единственный способ защитить URL, переданный cmd.exe от интерпретации символов. такие как & и ^ для добавления завершающего пробела . Это работает во всех случаях, кроме одного крайнего случая, который, однако, должен быть редким в реальном мире: если URL содержит что-то вроде %FOO% и переменная среды с именем FOO существует , %FOO% - это непреднамеренно расширен.

...