Anzeige:
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 15 von 16

Thema: Bestimmte Ausgabe von wget als Variable benutzen

  1. #1
    Registrierter Benutzer
    Registriert seit
    31.08.2002
    Ort
    Berlin
    Beiträge
    128

    Question Bestimmte Ausgabe von wget als Variable benutzen

    hi


    Ich programmiere in C. Jetzt führe ich in C den Befehl:
    Code:
    system("wget www.google.de");
    aus. Jetzt will ich 1. wissen wann der download zu Ende ist und 2. den Status wie weit er schon fortgeschritten ist.
    Die Ausgabe von wget sieht ja wie folgendermaßen aus
    Code:
     --12:01:58--  http://www.google.de/
               => `index.html'
    Auflösen des Hostnamen »www.google.de«.... fertig.
    Verbindungsaufbau zu www.google.de[216.239.55.100]:80... verbunden.
    HTTP Anforderung gesendet, warte auf Antwort... 200 OK
    Länge: 3,326 [text/html]
    
    100%[====================================>] 3,326         19.57K/s    ETA 00:00
    
    12:01:59 (19.57 KB/s) - »index.html.2« gespeichert [3326/3326]
    deswegen brauche ich nur die letzten beiden Zahlen. Also beim Beispiel wäre es [3326/3326]. Das Problem ist ja das die Ausgabe auf dem Bildschirm ist und nicht in mein Programm ? Wie kriege ich jetzt die beiden Zahlen als Variable ?

    MFG
    xmarvel

  2. #2
    Registrierter Benutzer Avatar von TheDodger
    Registriert seit
    17.05.2001
    Ort
    Hamburg
    Beiträge
    615

    Re: Bestimmte Ausgabe von wget als Variable benutzen

    Original geschrieben von xmarvel

    Die Ausgabe von wget sieht ja wie folgendermaßen aus
    Code:
     --12:01:58--  http://www.google.de/
               => `index.html'
    Auflösen des Hostnamen »www.google.de«.... fertig.
    Verbindungsaufbau zu www.google.de[216.239.55.100]:80... verbunden.
    HTTP Anforderung gesendet, warte auf Antwort... 200 OK
    Länge: 3,326 [text/html]
    
    100%[====================================>] 3,326         19.57K/s    ETA 00:00
    
    12:01:59 (19.57 KB/s) - »index.html.2« gespeichert [3326/3326]
    und genau da wird dein problem liegen, denn '[3326/3326]' wird erst nach dem erfolgreichem download angezeigt.
    (sowas lässt sich idealerweise auch in der bash mitverfolgen )

    Zu deinem eigentlichen problem ... hab ich nicht den blassesten schimmer, wie du sowas in C regeln kannst.
    Unter QT fängt man sowas mit QProzess ab ...
    Aber QT bedingt nunmal C++
    Bodo
    Systemadmistration UNIX

  3. #3
    Registrierter Benutzer
    Registriert seit
    31.08.2002
    Ort
    Berlin
    Beiträge
    128
    lol stimmt ne dann eben die Prozent Angabe. Eine Idee hab ich ja man könnte die Ausgabe in eine Datei schreiben und dann die Datei durchparsen nach dem % und anschließend den Wert abspeichern (Nur der Wert ändert sich ja auch logischerweise). Deswegen ist der Weg naja sagen wir mal bescheiden. Dafür denke ich mal muss es auch ne andere Möglichkeit geben. (Hoff ich)

  4. #4
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    es gibt so nen c befehl mit dem du n programm starten kannst und gleich dazu entweder zum stdin oder stdout eine pipe

    aus dem zeugs kannst du dann wie aus ner datei lesen

    steht im "Unix - Linux System Programmierung" (Addison Weasley) von H.H, aber das ist bei mir zuhause...

    ich schau auf montach mal nach, ok?

    MfG Peschmä

    P.S. gibts nicht ne art libwget oder so, so dass du aufs parsen des output verzichten könntest?
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  5. #5
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    libCURL kann so etwas:

    http://curl.haxx.se/libcurl/

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  6. #6
    Registrierter Benutzer
    Registriert seit
    31.08.2002
    Ort
    Berlin
    Beiträge
    128
    thx @ all

    werde mir mal curl anschauen. Mal sehen ob ich das hinkriege.

    MFG
    xmarvel

  7. #7
    Registrierter Benutzer
    Registriert seit
    31.08.2002
    Ort
    Berlin
    Beiträge
    128
    Hab jetz curl probiert. Hab erstmal ein Beispiel Code genommen leider kann ich das nicht compilen benutze KDevelop 2.1.
    Es kommt immer der selbe Fehler obwohl er die Header Datei findet.
    /home/xmarvel/Developer/test/test/main.c:35: undefined reference to `curl_easy_init'
    Muss ich beim Compiler noch was einstellen ?

    MFG
    xmarvel

  8. #8
    Registrierter Benutzer
    Registriert seit
    25.12.1999
    Ort
    Stuttgart
    Beiträge
    259
    Hi,

    hast Du die libcurl schon in Dein Project eingetragen, damit gegen sie gelinkt wird ?
    ( irgendwo unter Project->Options->Compilerflags oder so, kann grad nicht nachschauen ).
    Linker Flag müsste so aussehen: -lcurl

    Gruß micha
    IRC: irc.euirc.net #tux

  9. #9
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Das ist ein Fehler des Linkers.

    Der Pfad wo libcurl.a bzw. libcurls.so ist, muß bei den Linker Option eingetragen sein.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  10. #10
    Registrierter Benutzer
    Registriert seit
    12.09.2000
    Beiträge
    46
    Original geschrieben von peschmae
    es gibt so nen c befehl mit dem du n programm starten kannst und gleich dazu entweder zum stdin oder stdout eine pipe
    Schau dir mal das Programm ivgetty/IVAM an, dass macht genau das. Du machst ein fork, biegst die stdin/stdout - pipes (u.A. mit dup2) um und startest in einer der beiden Instanzen wget mittels system ... zumindest habe ich das so in Erinnerung. Aber wie gesagt, schau dir mal den src von ivgetty an, am besten du suchst nach dup2.

    Viel Glück ;-)
    Bei Problemen meld dich halt wieder
    Geändert von Sion (13-09-2002 um 17:52 Uhr)

  11. #11
    Registrierter Benutzer
    Registriert seit
    31.08.2002
    Ort
    Berlin
    Beiträge
    128
    Original geschrieben von Sion


    Schau dir mal das Programm ivgetty/IVAM an, dass macht genau das. Du machst ein fork, biegst die stdin/stdout - pipes (u.A. mit dup2) um und startest in einer der beiden Instanzen wget mittels system ... zumindest habe ich das so in Erinnerung. Aber wie gesagt, schau dir mal den src von ivgetty an, am besten du suchst nach dup2.

    Viel Glück ;-)
    Bei Problemen meld dich halt wieder
    thx werd aber warscheinlich curl nehmen aber ich komm auf dein Angebot zurück.

    @micha und anda_skoa
    thx hat geklappt aber jetzt habe ich eigentlich noch ne doofe Frage wo ich die antwort warscheinlich schon weiss aber wenn das Programm fertig ist und andere User es benutzen wollen brauchen sie dann auch die Devel zu curl ?

    MFG
    xmarvel

  12. #12
    Registrierter Benutzer
    Registriert seit
    25.12.1999
    Ort
    Stuttgart
    Beiträge
    259
    Hi,

    das kommt ganz drauf an, wie Du Dein Programm anbietest
    Aber sollte man es selber kompilieren müssen, dann ja.

    Gruß micha
    IRC: irc.euirc.net #tux

  13. #13
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    eben, das mit dem Pipe - Umbiegen, das macht die Funktion
    popen für dich, etwa so:

    FILE *dz;

    if ((dz = popen(cmdline, "r")) == NULL)
    printf("Could not open pipe");

    //Lesen mit fread

    pclose(dz);


    Ich hab damit (natürlich mit "w" stat "r") schon mal von der Sounddevice /dev/dsp auf nen Lame Encoder (stdin) geschrieben. Funzt bestens.

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  14. #14
    Registrierter Benutzer Avatar von ContainerDriver
    Registriert seit
    10.01.2003
    Beiträge
    418
    Hallo.
    Auch wenn der Thread schon etwas älter ist, ist er dennoch recht interessant für mich.
    Ich wollte auch wget benutzen um eine HTML-Seite aus dem Internet runterzuladen (libcurl scheint für meine Zwecke geringfügig überdimensioniert zu sein).
    Dummerweise funktioniert aber popen bei wget nicht, d.h. es wird wohl ein FILE-Stream geöffnet, allerdings kann man von diesem nicht lesen & die Ausgabe von wget erscheint ganz normal auf dem Terminal.
    Hat das bei irgendjmd. schon mal funktioniert?

    Gruß, FLorian

    EDIT: Ich habe gerade den Befehl curl entdeckt. Zur Not würde es damit auch funktionieren, wget wäre aber vorteilhafter.
    Geändert von ContainerDriver (27-01-2005 um 21:50 Uhr)
    Ein gebrechlich Wesen ist der X-Server.

  15. #15
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Wget schreibt nicht auf den stdout sondern auf den Stderr.

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •