Sammenlign URL-indhold med diff i Linux: Eksempler i Python og Perl

Hvordan fungerer kommandoen "diff <(wget -q -O - URL1) <(wget -q -O - URL2)" i Linux, og hvordan kan et script håndtere flere streams? Kan der gives eksempler i Python eller Perl?

Kommandoen "diff <(wget -q -O - URL1) <(wget -q -O - URL2)" i Linux sammenligner indholdet af to webadresser ved at hente deres data og bruge diff-værktøjet til at vise forskellene. Python og Perl kan bruges til at håndtere flere streams ved at hente indholdet fra flere URL'er, gemme dem i filer og sammenligne dem med diff.

Hvordan fungerer kommandoen "diff <(wget -q -O - URL1) <(wget -q -O - URL2)" i Linux, og hvordan kan et script håndtere flere streams? Kan der gives eksempler i Python eller Perl?

Kommandoen diff <(wget -q -O - URL1) <(wget -q -O - URL2) i Linux bruges til at sammenligne indholdet af to webadresser (URL'er) ved hjælp af diff-værktøjet. Her er en trin-for-trin forklaring af, hvordan kommandoen fungerer:

  • wget -q -O - URL1: Henter indholdet fra URL1 uden at vise output (takket være -q flaget) og sender det til standard output (takket være -O - flaget).
  • wget -q -O - URL2: Henter indholdet fra URL2 på samme måde som ovenfor.
  • <(command): Processubstitution, som gør det muligt at bruge output fra en kommando som en fil. I dette tilfælde bruges output fra wget som input til diff.
  • diff: Sammenligner indholdet af de to streams og viser forskellene.

For at håndtere flere streams i et script kan du bruge Python eller Perl. Her er eksempler på begge:

Python Eksempel

import subprocess

def fetch_url_content(url):
    result = subprocess.run(['wget', '-q', '-O', '-', url], capture_output=True, text=True)
    return result.stdout

def compare_urls(url1, url2):
    content1 = fetch_url_content(url1)
    content2 = fetch_url_content(url2)
    
    with open('file1.txt', 'w') as f1, open('file2.txt', 'w') as f2:
        f1.write(content1)
        f2.write(content2)
    
    result = subprocess.run(['diff', 'file1.txt', 'file2.txt'], capture_output=True, text=True)
    print(result.stdout)

# Eksempel brug
url1 = 'http://example.com/page1'
url2 = 'http://example.com/page2'
compare_urls(url1, url2)

Perl Eksempel

use strict;
use warnings;
use LWP::Simple;

sub fetch_url_content {
    my ($url) = @_;
    return get($url);
}

sub compare_urls {
    my ($url1, $url2) = @_;
    my $content1 = fetch_url_content($url1);
    my $content2 = fetch_url_content($url2);
    
    open my $fh1, '>', 'file1.txt' or die $!;
    print $fh1 $content1;
    close $fh1;
    
    open my $fh2, '>', 'file2.txt' or die $!;
    print $fh2 $content2;
    close $fh2;
    
    my $diff = `diff file1.txt file2.txt`;
    print $diff;
}

# Eksempel brug
my $url1 = 'http://example.com/page1';
my $url2 = 'http://example.com/page2';
compare_urls($url1, $url2);

Begge eksempler viser, hvordan man kan hente indhold fra to URL'er, gemme dem i midlertidige filer og derefter bruge diff til at sammenligne dem. Dette kan udvides til at håndtere flere streams ved at gentage processen for flere URL'er.