Portál AbcLinuxu, 10. května 2025 07:15

Dotaz: kdialog + progressbar + kopírování souboru

FrostyX avatar 23.2.2011 17:11 FrostyX | skóre: 27 | blog: Frostyho_blog | Olomouc
kdialog + progressbar + kopírování souboru
Přečteno: 272×
Odpovědět | Admin

Ahoj, potřeboval bych zkopírovat (10GB) soubor a průběh kopírováni zobrazit pomocí progressbaru v aplikaci kdialog. Jenže vůbec nevím jak to kopírováni s kdialogem provázat. Po třech hodinách hledání jsem našel jen jak pracovat s tím progressbarem a to je asi takto:

dbusRef=`kdialog --progressbar "Initializing" 4`
qdbus $dbusRef Set "" value 1
qdbus $dbusRef setLabelText "Thinking really hard"
sleep 2
qdbus $dbusRef Set "" value 2
sleep 2
qdbus $dbusRef setLabelText "Thinking some more"
qdbus $dbusRef Set "" value 3
sleep 2
qdbus $dbusRef Set "" value 4
sleep 2
qdbus $dbusRef close

Věděl by někdo jak to přepsat prosím ?
FrostyX.cz | 1984 was not supposed to be an instruction manual.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

25.2.2011 00:59 camel1cz | skóre: 25
Rozbalit Rozbalit vše Re: kdialog + progressbar + kopírování souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ahoj, odpovídal sem ti v jiném threadu o tom samém, ale asi tě mé řešení nezajímalo :-)

Tady je skript, co dělá to co chceš s navrhovaným toolem - ten kdialog neznám (sem gnomista :-)
#!/bin/bash
PIPE=.progress

if [ ! -p $PIPE ]
then
    mkfifo $PIPE
fi

rsync -av --progress .sdata /tmp/ > $PIPE &
RSYNCPID=$!

cat $PIPE |
   awk '{RS="\r"; sub("%", ""); print $2; fflush();}' |
   zenity --progress --title "Kopírování" \
       --text="Čekejte..." --percentage=0

if [ "$?" -ne 0 ]
then
    kill $RSYNCPID
fi
Uprav si proměnnou PIPE a parametry zenity (texty)...
FrostyX avatar 25.2.2011 03:35 FrostyX | skóre: 27 | blog: Frostyho_blog | Olomouc
Rozbalit Rozbalit vše Re: kdialog + progressbar + kopírování souboru

Ahoj, tvá odpověď mě samozřejmě zajímala a děkuji za ni, jenže minule jsi poslal jednořádkový script "zenity --progress". Hned jsem si šel hledat info o zenity, zkoušel s tím pracovat, narazil na kdialog a zkoušel i ten. Problém byl ten, že jsem zenity/kdialog nedokázal propojit s kopírováním. Strávil jsem nad tím poměrně dlouhou dobu a řekl jsem si, že bych dotaz mohl položit trochu jinak / lépe. Právě sedím a píšu prográmek v Qt, který by to udělal a najednou odpověď.

Děkuji moc, přesně tohle jsem od začátku chtěl. Ještě to zkusím upravit pro použití s kdialogem, ale pokud to nevyjde tak nevadí.

Měl bych k tomu skriptíku ale jednu otázku. Aby mi to kopírovalo fileA a vytvořilo fileB upravil jsem řádek rsync -av --progress fileA fileB > $PIPE &. Jakou roli v tom má hodnota proměnné PIPE nastavená na začátku ? Nechal jsem totiž .progress a funguje to.

FrostyX.cz | 1984 was not supposed to be an instruction manual.
25.2.2011 14:03 camel1cz | skóre: 25
Rozbalit Rozbalit vše Re: kdialog + progressbar + kopírování souboru
OK, v poho...

Ta proměnná PIPE obsahuje cestu k zvláštnímu typu souboru - pojmenované rouře (či jak se to jmenuje česky - v originale named pipe). Je to objekt, do kterého může jedna aplikace psát a druhá z něj číst. Je to stejné jako když napíšeš např. "ls -l | grep xxx", ale nechceš nebo nemůžeš to napsat do jednoho řádku. Výstup si prostě uložíš a později zpracuješ...

Logika toho skriptu je taková, že rsync vypisuje průběh kopírování na standardní výstup, ten ukládám do PIPE... následně pustím awk skript, kterej ten výstup zpracovává a vypisuje pouze hotová procenta každá hodnota na novém řádku (bez symbolu %)

To, že to nejde může být: 1) kdialog chce jiný vstup než zenity. zenity čte ze vstupu čísla a interpretuje je jako procenta.

2) ta named pipe vytvoří ve špatném adresáři a pak se nenajde... zkusil bych tam dát nějakou absolutní cestu - nabízí se /tmp/.progress - to by ale mělo vypisovat nějakou chybu

3) máš jinou verzi někreré aplikace (rsync?) a nefunguje to parsování... píše to nějakou chybu? Pokud ne, tak doporučuji odladit to postupně...

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.