Résulta sortie de commande console

Résolu/Fermé
Utilisateur anonyme - 2 oct. 2013 à 19:19
 Utilisateur anonyme - 5 oct. 2013 à 14:59
Bonjour,
je cherche en vain a récupérer le sortie standard de mon programme, si je le redirige dans un fichier, je me retrouve avec des millier de ligne.
Ce que je voudrais, c'est récupérer la sortie standard de mon programme toute les 10 seconde environ. et ce dans un fichier.

j'ai déjà lancé cette commande ( monprg > fichier.text ) qui me redirige la sortie dans un fichier , mais après quelques minutes, le fichier fait 48000 lignes !!! et donc travailler dessus devient impossible, sachant que je veux la dernière ligne...

je sais que je demande l'impossible mais si quelqu'un peu m'éclairer, me donner une façon de faire puisque je suis complétement perdu.

Voila si besoin demandez moi.
A voir également:

13 réponses

Bonjour,

as-tu essayé avec tail?

(tacommande | tail > tonfichier)

Cordialement

NB: cela devrait te renvoyer les 10 dernières lignes, mais tu pourras faire varier ce nombre avec l'option -n
1
Utilisateur anonyme
2 oct. 2013 à 20:51
bonsoir, je m'était servit de tail pour faire un affichage de ma dernière ligne.
Mais pas de cette façons ! je teste et je te donne des résulta !
0
Utilisateur anonyme
2 oct. 2013 à 20:58
Après avoir testé, je me retrouve avec pour un traitement plus court 2300 ligne.
mais si j'applique tail rien de change. j'ai toujours autant de lignes...
0
Utilisateur anonyme
2 oct. 2013 à 23:38
comment fonctionne ton programme? tu l'arrêtes toi-même ou il s'arrête automatiquement?
0
Utilisateur anonyme
2 oct. 2013 à 23:39
colle ici la commande que tu utilises pour tester
0
Utilisateur anonyme
3 oct. 2013 à 06:40
Mon programme ( qui n'est pas le mien reellement ...) se coupe automatiquement quand le traitement est fini.
La commande megadl 'http://...' > fichier.txt
Ou megadl 'http://...' | tail fichier.txt

Voila
0
Utilisateur anonyme
3 oct. 2013 à 07:17
megadl 'http://...' | tail > fichier.txt 

As-tu essayé comme ça ou bien tu as juste oublié le ">"?
0
Utilisateur anonyme
3 oct. 2013 à 07:25
Oui j'ai essaye en mettant le > apres uniquement sur le tail.
Je suppose que si tu pose cette question sa veux dire que il fallait que je le mettent avant ....
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
3 oct. 2013 à 08:07
hello
cette commande affiche une ligne sur 100
commnde | awk '!((NR-1)%100)'
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
3 oct. 2013 à 09:46
celle ci affiche une ligne toutes les 10s
commande | awk 'BEGIN {t=systime()} {if(systime()-t >= 10){print ; t=systime()}}'
0
Merci je vais essayé !

Edit : je suis désolé mais le fichier contient toujours autant de lignes
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
4 oct. 2013 à 07:58
bizarre
$ seq 1 1000 |  awk '!((NR-1)%100)'
1
101
201
301
401
501
601
701
801
901
$
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ryko1820 Messages postés 1645 Date d'inscription dimanche 28 avril 2013 Statut Membre Dernière intervention 15 août 2021 276
Modifié par ryko1820 le 3/10/2013 à 19:34
Hello,

je ne connais pas particulièrement ce programme mais comment se comporte-t-il quand il est utilisé sans la redirection ?

Y a t-il par exemple, un compteur de progression rafraîchi plusieurs fois par seconde qui s'affiche ... ?

Ou bien (c'est semble-t-il un downloader ?) les données chargées, sans commutateur (un peu comme avec curl), sont affichées vers la console, et en fait ce sont les datas téléchargées qui sont actuellement redirigées vers le fichier.

Qu'est ce que contient actuellement le fichier vers lequel la sortie standard est redirigée ?

Que cherches tu à faire en loguant la sortie de ce prog. ?

Ce qui serait peut être plus intéressant serait, peut-être, de récupérer la sortie des erreurs, en bref le stderr que le stdout ?

megadl 'https://mon_adresse' 2> fichier_des_erreurs.log

Sinon si c'est vraiment sur la sortie standard que l'on cherche à obtenir une info, par exemple, un message confirmant la fin du téléchargement, dans ce cas là, il faut piper vers un grep ...

megadl 'https://mon_adresse' | grep "le message que je cherche à voir" > fichier_des_erreurs.log

Voilà ...



You may stop me but you can't stop us all ;-)
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
3 oct. 2013 à 19:08
Salut,

Pour t'aider il faudrait qu'on en sache un peu plus sur ce que fait réellement ton programme, et surtout ce qu'il produit comme sortie ;-\
0
ryko1820 Messages postés 1645 Date d'inscription dimanche 28 avril 2013 Statut Membre Dernière intervention 15 août 2021 276
3 oct. 2013 à 19:13
Oui, un résumé de ce que je disais :p
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
3 oct. 2013 à 19:28
Oups, j'ai posté juste après toi et du coup je n'ai pas vu ton post, désolé ;-\
0
ryko1820 Messages postés 1645 Date d'inscription dimanche 28 avril 2013 Statut Membre Dernière intervention 15 août 2021 276
3 oct. 2013 à 19:29
pas de souci, je croyais que c'était pour clarifier pour le demandeur ...
0
Bonjour, alors pour vous répondre à tous :

- "je ne connais pas particulièrement ce programme mais comment se comporte-t-il quand il est utilisé sans la redirection ? " il se comporte de la meme facon que si je fait la redirection !

- "Y a t-il par exemple, un compteur de progression rafraîchi plusieurs fois par seconde qui s'affiche ... ? "Oui il s'agit d'un programme qui télécharge le fichier que l'on lui donne. mais plus spécifiquement un fichier provenant du site mega la progression s'affiche de cette manière, en une seule ligne qui s'actualise : buildire.rar: 4% - 158,9 Kio of 3,2Â Mio

- "Qu'est ce que contient actuellement le fichier vers lequel la sortie standard est redirigée ? " le fichier dans lequel sont redirigé les valeur ce trouve comme ceci après ou pendant l'exécution du programme : (exemple sur 20 ligne et pas 2300 ... :) )

 [37;1mbuildire.rar [0m:  [32;1m0% [0m -  [32;1m0 octet [0m of 3,2 Mio [0K
[37;1mbuildire.rar [0m: [32;1m0% [0m - [32;1m1,4 Kio [0m of 3,2 Mio [0K
[37;1mbuildire.rar [0m: [32;1m0% [0m - [32;1m2,8 Kio [0m of 3,2 Mio [0K
[37;1mbuildire.rar [0m: [32;1m0% [0m - [32;1m4,2 Kio [0m of 3,2 Mio [0K
[37;1mbuildire.rar [0m: [32;1m0% [0m - [32;1m5,6 Kio [0m of 3,2 Mio [0K
[37;1mbuildire.rar [0m: [32;1m0% [0m - [32;1m7,0 Kio [0m of 3,2 Mio [0K
[37;1mbuildire.rar [0m: [32;1m0% [0m - [32;1m8,4 Kio [0m of 3,2 Mio [0K
[37;1mbuildire.rar [0m: [32;1m0% [0m - [32;1m9,8 Kio [0m of 3,2 Mio [0K
[37;1mbuildire.rar [0m: [32;1m0% [0m - [32;1m11,2 Kio [0m of 3,2 Mio [0K
[37;1mbuildire.rar [0m: [32;1m0% [0m - [32;1m12,7 Kio [0m of 3,2 Mio [0K
[37;1mbuildire.rar [0m: [32;1m0% [0m - [32;1m14,1 Kio [0m of 3,2 Mio [0K
[37;1mbuildire.rar [0m: [32;1m0% [0m - [32;1m15,5 Kio [0m of 3,2 Mio [0K
[37;1mbuildire.rar [0m: [32;1m0% [0m - [32;1m16,9 Kio [0m of 3,2 Mio [0K
[37;1mbuildire.rar [0m: [32;1m0% [0m - [32;1m18,3 Kio [0m of 3,2 Mio [0K
[37;1mbuildire.rar [0m: [32;1m0% [0m - [32;1m19,7 Kio [0m of 3,2 Mio [0K
[37;1mbuildire.rar [0m: [32;1m0% [0m - [32;1m21,1 Kio [0m of 3,2 Mio [0K
[37;1mbuildire.rar [0m: [32;1m0% [0m - [32;1m22,5 Kio [0m of 3,2 Mio [0K
[37;1mbuildire.rar [0m: [32;1m0% [0m - [32;1m23,9 Kio [0m of 3,2 Mio [0K
[37;1mbuildire.rar [0m: [32;1m0% [0m - [32;1m25,3 Kio [0m of 3,2 Mio [0K
[37;1mbuildire.rar [0m: [32;1m0% [0m - [32;1m26,7 Kio [0m of 3,2 Mio [0K

les valeur avec crochet tel que " [37;1m" corresponde aux couleur d'affichage du texte.

- "Que cherches tu à faire en loguant la sortie de ce prog. ? " ==> ce programme est censé télécharger un fichier depuis le site mega et retourner l'avancement grâce au fichier de log pour avoir le pourcentage. et ainsi actualiser la page avec php. php a pour rôle d'exécuter la commande et ensuite de vérifier l'état de l'avancement. Mais pour l'instant je cherche a le faire a la main sans automatiser la tache mais c'est la que je bug ...

- je ne peux pas chercher une valeur en particulier puisque je cherche a récupérer le pourcentage d'avancement. qui théoriquement change.

comme il y a beaucoup de ligne ce que maintenant je cherche a faire c'est limiter le nombre qui sera écrit dans le fichier. par exemple un début serait d'actualiser le fichier toute les 10 secondes avec une ligne récupéré a un l'instant T dans la sortie standard du programme. histoire de me retrouver avec un fichier de quelques centaine et pas des millier de ligne.

Voila j'espère avoir répondu a vos questions ...
et j'espère que mes réponse vous aiderons a m'aider ...
Merci pour tous en tout cas.
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
4 oct. 2013 à 08:29
probable que les lignes ne se terminent pas avec \n mais avec \r
essayer
commande | awk 'BEGIN {RS="\r"; t=systime()} {if(systime()-t >= 10){print ; t=systime()}}'
0
Utilisateur anonyme
4 oct. 2013 à 16:48
C'est une chose que je n'est pas précisé ( désolé j'ai oublié ) Et oui je me suis aperçu que les ligne ne termine pas par des \n mais par des ^M et apparemment d'après mes recherche par un ^M qui est l'équivalent de \n sous mac...
donc si je comprend il faut que j'adapte
commande | awk 'BEGIN {RS="\r"; t=systime()} {if(systime()-t >= 10){print ; t=systime()}}'
en
commande | awk 'BEGIN {RS="^M"; t=systime()} {if(systime()-t >= 10){print ; t=systime()}}'

Est-ce correct ?
0
Utilisateur anonyme
4 oct. 2013 à 17:04
j'ai le droit a une petite erreur :
awk: line 2: function systime never defined
0
ryko1820 Messages postés 1645 Date d'inscription dimanche 28 avril 2013 Statut Membre Dernière intervention 15 août 2021 276
Modifié par ryko1820 le 4/10/2013 à 20:42
 
Sinon essayer d'enregistrer dans une variable le pourcentage de progression et n'enregistrer dans le log. l'heure, la taille récupéré et le pourcentage de progression qu'à chaque fois que ce pourcentage change, cela permettrait d'avoir une progression sur une centaine de ligne.

Nettoyer au passage les caractères inutiles dans la ligne, ne doit pas non plus être bien sorcier, d'autant plus que tu sembles mieux maîtriser que moi awk.

Sans oublier de garder une gestion des erreurs en cas de problème (pas de OK en fin de ligne ?) ...

Je ne vois pas trop comment coder ça, mais ça ne me semble pas impossible ...
 
0
Utilisateur anonyme
4 oct. 2013 à 22:59
Cela signifie donc que l'on doit analyser la ligne qui est retourné a chaque fois.
je ne suis pas très fort en ce qui est conception de script mais j'ai les base.
si je dois faire ce qui est dit j'aurais besoin d'un coup de pouce.
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
5 oct. 2013 à 08:44
si awk ne connait pas systime, essayer:
awk 'BEGIN {RS="\r"; d="date +%s"; d | getline t} {close(d); d | getline x; if(x-t >= 10){print ; close(d); d | getline t}}'
0
Cette commande me convient ! elle marche comme je le souhaite !
cependant si maintenant je veux rediriger cette sortie temporisé dans un fichier ? je rajoute " > file.txt " a la suite de la commande awk ?

Edit: après avoir testé cela marche ! Merci !
Par contre a la fin , quand le fichier est téléchargé le programme ecrit : file downloaded et la temporisation ne me permet pas de le récupérer : il y a t'il un moyen de le faire ?
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
5 oct. 2013 à 11:14
je n'ai pas bien compris la dernière question.
est-ce parce que le awk ne se termine pas quand le fichier est téléchargé ?
0
Utilisateur anonyme
5 oct. 2013 à 11:42
pardon je reformule :
Lorsque ça télécharge, awk fait son effet et m'affiche une ligne toute les x seconde.
Mais quand la commande ce termine en temps normale ( la commande megadl uniquement )
elle affiche " file downloaded ". Mais cela tombe entre l'intervalle de temps et awk n'a pas encore actualisé la ligne. ce que je souhaiterais c'est récupérer cette dernière ligne qui affiche "file downloaded".
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
5 oct. 2013 à 12:23
essayer avec:
awk 'BEGIN {RS="\r"; d="date +%s"; d | getline t} {close(d); d | getline x; if(x-t >= 10){print ; close(d); d | getline t}} /file downloaded/ {print ; exit} '
0
Utilisateur anonyme
5 oct. 2013 à 14:03
Merci est ce que je peux avoir un peu d'explication sur cette commande histoire de ne pas l'utiliser bêtement et éventuellement refaire des modification dessus ensuite (surtout savoir comment elle marche ) ?
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
5 oct. 2013 à 14:44
BEGIN {RS="\r"; défini ^M comme fin de ligne à la place de \n
d="date +%s"; d contient la commande "date +%s" qui retourne des secondes (remplace systime()
d | getline t} exécute "date +%s" et met le resultat dans la variable t
{close(d); d | getline x; if(x-t >= 10) pour chaque ligne, prend la date et compare au t précédent
{print ; close(d); d | getline t}} si le temps est >= 10s, on imprime la ligne et on prend le nouveau temps
/file downloaded/ {print ; exit} si la ligne contient "file downloaded", on imprime et termine
0
Utilisateur anonyme
5 oct. 2013 à 14:59
Merci Beaucoup pour ton aide !!
j'arrive a faire ce que je souhaite maintenant ! disons que avec mes compétence seul, honnêtement je ne serais pas arrivé a une telle ligne de commande ... Je ne suis encore un pro en la matière ...

Et Encore Merci !
0