Sådan skriver du et script, der accepterer input fra filnavn eller stdin (Python, Bash, Perl)

Hvordan kan man skrive et script, der accepterer input fra enten et filnavnsargument eller fra stdin? Findes der en nem "out of the box" metode til dette, eller skal man skrive en smule logik i scriptet?

For at skrive et script, der accepterer input fra enten et filnavnsargument eller fra stdin, kan man bruge en simpel logik i scriptet, som vist i eksemplerne for Python, Bash og Perl.

Hvordan kan man skrive et script, der accepterer input fra enten et filnavnsargument eller fra stdin?

For at skrive et script, der kan acceptere input fra enten et filnavnsargument eller fra stdin, kan man benytte sig af en smule logik i scriptet. Der findes ikke en "out of the box" metode, der dækker begge scenarier fuldstændigt, men det er relativt enkelt at implementere. Her er en generel tilgang til, hvordan man kan gøre det i forskellige programmeringssprog:

Python


import sys

def read_input(file=None):
    if file:
        with open(file, 'r') as f:
            return f.read()
    else:
        return sys.stdin.read()

if __name__ == "__main__":
    if len(sys.argv) > 1:
        input_data = read_input(sys.argv[1])
    else:
        input_data = read_input()
    
    print(input_data)

Bash


#!/bin/bash

if [ -n "$1" ]; then
    cat "$1"
else
    cat /dev/stdin
fi

Perl


use strict;
use warnings;

my $filename = shift @ARGV;

if ($filename) {
    open my $fh, '<', $filename or die "Could not open file '$filename' $!";
    while (my $line = <$fh>) {
        print $line;
    }
    close $fh;
} else {
    while (my $line = ) {
        print $line;
    }
}

Generelle trin

  • Tjek om der er givet et filnavnsargument.
  • Hvis der er et filnavnsargument, læs indholdet fra filen.
  • Hvis der ikke er et filnavnsargument, læs indholdet fra stdin.

Ved at følge disse trin kan du nemt skrive et script, der håndterer input fra både et filnavnsargument og stdin.

Opret din første opgave på få minutter

Spar dig selv for besvær og kom igennem din to-do liste i dag

1

Beskriv din opgave

2

Modtag bud

3

Få løst din opgave

opgaver platform services

Møbelsamling

Hjælp med at samle Ikea klædeskab

opgaver platform services

Maler

Klargøring af lejlighed til flyttesyn

opgaver platform services

Flyttehjælp

Flytning af 150 kvm hus til Roskilde fra København

opgaver platform services

Havearbejde

Beskæring af 4 større træer

opgaver platform services

IT support

Geninstallering af windows + programmer

opgaver platform services

Elektriker

Installation af Sonos musikanlæg i hus

opgaver platform services

Rengøring

Ugentlig rengøring af lejlighed (114kvm)

opgaver platform services

Flyttehjælp

Flytning af 150 kvm hus til Roskilde fra København

opgaver platform services

Elektriker

Opsætning af lamper i stue og soveværelse

opgaver platform services

Catering

3-retters menu til 14 mennesker