Perl: sistem çıktısını gizle


2

Linux'ta Perl 5.8.8 kullanarak, gizlenmek için bir perl 'system' komutunun çıktısına ihtiyacınız var. Kodumdaki komut şudur:

system("wget", "$url", "-Omy_folder/$date-$target.html", "--user-agent=$useragent");

> /dev/null 2>&1Sistem komutundaki farklı yerlerde kullanmayı denedim.

system("wget", "$url", "-Omy_folder/$date-$target.html", "--user-agent=$useragent","> /dev/null 2>&1");

Yönlendirmenin nerede olması /dev/nullgerektiği konusunda bana yardımcı olan var mı?


Peki ya capturex veya capturex?
osirisgothra

Yanıtlar:


3

System () işlevini birden fazla argüman ile çağırdığınızda, perl'e direk olarak exec * () çağrılarından birine geçmesini söylüyorsunuz, bu yüzden bir kabuk ile çağrılmayacak. Kabuk, dosya yönlendirmesini anlayan şeydir. Bunu dene:

system("wget $url -Omy_folder/$date-$target.html --user-agent=$useragent >/dev/null 2>&1");

Bunun teknik olarak doğrudan çalıştırılmasından daha az güvenli olduğunu unutmayın.

Alıntı yapmak için, String :: ShellQuote kullanın veya sadece mantığı kendiniz uygulayın:

sub sq {
  my $str = shift;

  if (!$str) {
    $str = "''";
  } else {
    $str =~ s|'|'\\''|g;
    $str = "'$str'";
    $str =~ s|^''||;
    $str =~ s|''$||;
  }

  return($str);
}

$useragent = sq($useragent);
system("wget $url -Omy_folder/$date-$target.html --user-agent=$useragent >/dev/null 2>&1");

Ayrıca, bunu biraz daha sys-admin-y ve biraz daha az programcı-y yapmak için, kabuk / dosya yönlendirme halkalarından atlamak yerine, -q seçeneğini kullanarak yazmayı düşündün mü?


bu işe yarar, $ useragent string 'dışında' ('karakterleri, o şekilde kaçmam gerekiyor karakterleri ...
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.