kann ich die Ausgabe eines perl-Skriptes in ...

  • ... einem solchen einlesen, ohne über das Dateisystem zu gehen?


    Bei einem compilat mache ich das z.B. so:

    Code
    if(open(FILE, "command |")){
       ... do something
    }

    Das gleiche bei nem Perlscript führt zu dem Fehler "broken pipe".
    Hab dann auch versucht, nicht nur den Scriptnamen anzugeben, sondern perl direkt mit aufzurufen - alles die gleiche Soße.


    Jemand vielleicht ne Idee?

    Ich bin verantwortlich für das, was ich schreibe, nicht für das, was Du verstehst!

  • da machst du wohl was falsch.


    wenn ich ein

    Code
    perl -e 'open(A,"sort /etc/passwd|"); while (<A>) { print "$_"; }'

    mache, bekomme ich die passwd sortiert ausgegeben .. sollte also so gehen, wie in perlfunc beschrieben ...

    VDR(Via Epia M-10000, 512MB, 2xNexus-s, 120GB&160GB&160GB Samsung SpinPoint, NEC 1300 DVD+-R/RW, IR-Kit, VFD Noritake)
    Gehäuse: Eigenbau (s.o.)

  • Hi sn123py,


    das was Du schreibst ist ja das, was bei mir auch tut.
    Wie sieht das aber aus, wenn Du statt "sort /etc/passwd" ein perlscript aufrufst, welches selbst Ausgaben produziert, die Du parsen möchtest?!?

    Ich bin verantwortlich für das, was ich schreibe, nicht für das, was Du verstehst!

  • ja, auch das geht:



    test.pl :

    Perl
    #!/usr/bin/perl
    
    
    print "a\n";
    print "b\n";
    print "c\n";
    exit


    test:


    Code
    macfly@4t:~$ perl -e 'open(A,"./test.pl |"); while (<A>) { print "$_"; }'
    a
    b
    c
    macfly@4t:~$


    dein Perlscript ist auch executable, du rufst es mit komplettem Pfad auf, und in der ersten Zeile steht der korrekte Pfad zum Interpreten?

    VDR(Via Epia M-10000, 512MB, 2xNexus-s, 120GB&160GB&160GB Samsung SpinPoint, NEC 1300 DVD+-R/RW, IR-Kit, VFD Noritake)
    Gehäuse: Eigenbau (s.o.)

    Einmal editiert, zuletzt von sn123py ()

  • strange!


    Vielleicht bin ich ja heute mit Plindheit geschlagen, oder es liegt an dem Script was ich aufrufen möchte.


    Versuch doch mal ein "vdrsync.pl -i /pfad/zu/aufnahme".


    Kannst Du die Ausgabe ausgeben, oder bekommst Du auch ne "broken pipe"?

    Ich bin verantwortlich für das, was ich schreibe, nicht für das, was Du verstehst!

  • :P




    Das meiste geht durchs perlscript. Nur dies " 10 Mbytes of 0 read" geht wohl über stderr direkt raus, aber wenn man will, kann man auch das umleiten.


    sonst noch Wünsche ?

    VDR(Via Epia M-10000, 512MB, 2xNexus-s, 120GB&160GB&160GB Samsung SpinPoint, NEC 1300 DVD+-R/RW, IR-Kit, VFD Noritake)
    Gehäuse: Eigenbau (s.o.)

  • OK, haste mich überzeugt.


    Dann muss es wohl daran gelegen haben, dass ich stderr auch haben wollte (mit 2>&1).
    Jetzt sach mir aba nich, dass det oooch geht ;D


    //Edit: ... by the way:
    haste ne Idee, wie ich große Zahlen ausgeben kann, ohne dass sie negativ werden?
    Wegen der Formatierung hatte ich es mit printf und %13ld probiert, aber das kleine L bringte garnix. Mussich die Formatierung selbigst basteln?

    Ich bin verantwortlich für das, was ich schreibe, nicht für das, was Du verstehst!

    Einmal editiert, zuletzt von geronimo ()

  • Danke für Eure Unterstützung.


    Ich glaube bei printf hab ich mir selbst ein Bein gestellt!
    Perl ist doch nicht typgebunden, d.h. es geht einfach mit %s :)
    (Das %lld muss ich mir trotzdem merken!)

    Ich bin verantwortlich für das, was ich schreibe, nicht für das, was Du verstehst!

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!