Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1451 connectés 

  FORUM HardWare.fr
  Programmation

  Récupérer une ligne 'stdout'

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Récupérer une ligne 'stdout'

n°21558
ManX
Posté le 30-03-2001 à 19:14:46  profilanswer
 

Arg... je débute en C, et pour débuter, je commence par un petit programme (Dock WindowMaker) simple de "monitoring" pour le client Genome@home  (seti@home like): http://gah.stanford.edu  
Mais j'ai un petit problème, certainement trés simple, mais je n'arrive pas à le résoudre.
Lorsqu'on lance le client dans un shell, j'ai une sortie à l'écran, qui affiche l'état d'avancement... et notament le pourcentage (par 10%) d'avancement d'une sequence (il y a 30 sequences en tout).... et je n'arrive pas à récuperer cette info (la dernière ligne que le client à envoyé à l'écran) !!!
Même en lançant le client dans un shell en faiseant une redirection vers un fichier ... rien !!? (juste les indications de départ ,la sequence, puis plus rien !!?).
Une solution ? (en C ou en shell bash).
Merci.

mood
Publicité
Posté le 30-03-2001 à 19:14:46  profilanswer
 

n°21559
zop
1 world, 1 web, 1 Windows
Posté le 30-03-2001 à 19:18:19  profilanswer
 

La sortie du prog se fait peut-être sur 'stderr' ...

n°21566
ManX
Posté le 30-03-2001 à 20:46:39  profilanswer
 

pas mieux :(
 
j' essai déjà depuis le shell (avant d'attaquer en C):
./ghclient.x > rapport.txt
./ghclient.x 1> rapport.txt
./ghclient.x 2> rapport.txt
ne me donnent rien !!!
 
Voilà la sortie écran lorsque je lance le client:
####################################################
####################################################
 
     Genome@Home Virtual Genome Client
 
     http://genomeathome.stanford.edu
     email:help@genomeathome.stanford.edu
 
####################################################
####################################################
version 0.93
 
Client ID is 6690955129112392134
 
Looking for unsent finished work . . .
No results found, continuing . . .
 
Check current work status . . .
0 superloops completed
1 subloops completed
You have unfinished work from a previous session.
 
Genome@home starting at sequence 2
 
 
Your current protein is: SH3/pdb1azg.2.spa
See http://genomeathome.stanford.edu/p [...] 1azg.2.spa
for information about this protein
   
 Initializing protein design algorithm
 Designing protein sequence 2  of 30
 10.0 %  
 20.0 %
 etc...  
 
Voilà ce que j'ai avec les redirections:  
####################################################
####################################################
 
     Genome@Home Virtual Genome Client
 
     http://genomeathome.stanford.edu
     email:help@genomeathome.stanford.edu
 
####################################################
####################################################
version 0.93
 
Client ID is 6690955129112392134
 
Looking for unsent finished work . . .
No results found, continuing . . .
 
Check current work status . . .
0 superloops completed
1 subloops completed
You have unfinished work from a previous session.
 
Genome@home starting at sequence 2
 
 
Your current protein is: SH3/pdb1azg.2.spa
See http://genomeathome.stanford.edu/p [...] 1azg.2.spa
for information about this protein
 
et voilà...cela s'arrête ici !!! rien de plus :cry:

n°21584
gilou
Modérateur
Modzilla
Posté le 31-03-2001 à 00:35:44  profilanswer
 

zop a écrit a écrit :

La sortie du prog se fait peut-être sur 'stderr' ...




 
C'est probablement ce qui se passe a mon avis.
 
Si tu es en Korn Shell,
./ghclient.x > rapport.txt 2>&1
redirigera la sortie de stderr dans stdin qui est redirige dans rapport.txt (l'ordre des redirections est important ici).
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°21588
verdy_p
Posté le 31-03-2001 à 01:58:40  profilanswer
 

gilou a écrit a écrit :

 
 
C'est probablement ce qui se passe a mon avis.
 
Si tu es en Korn Shell,
./ghclient.x > rapport.txt 2>&1
redirigera la sortie de stderr dans stdin qui est redirige dans rapport.txt (l'ordre des redirections est important ici).
A+,




 
Oups... en Korn-Shell la syntaxe "2>&1" ne redirige pas la sortie d'erreur vers stdin mais vers le même flux que stdout.
Ce qui fait qu'on peut faire une opération du genre:
 
programme1 2>&1 | programme2
 
et le pipe lit redirige bien stdout du programme1 vers stdin du programme2. La séquence est équivalente à:
 
mkpipe       &3     &4
programme1   1>&3 3>&-   2>&1 &
programme2   0>&4 4>&-
 
Sinon en général, il n'est pas requis d'utiliser un shell pour faire cette redirection de stdout et stderr du programme1 directement depuis programme2: il suffit que programme2 fasse un fork() pour créer un second processus fils, puis dans le processus fils, qu'il ferme stdout et stderr (qui ont été dupliqués du processus père) et les rouvre en dupliquant stdin (de façon à ce que le fils renvoie les données stdout et stderr vers le même flux que stdin du processus père), puis qu'il ferme stdin du fils ou l'ouvre sur un autre fichier d'entrée si nécessaire, ensuite le processus père peut lire le résultat du processus fils directement depuis son stdin. Le processus fils n'a plus qu'à lancer un exec du programme1.
 
On peut aussi dans le processus père avant de fait un fork créer un pipe (qui possédera deux handles de flux: un d'entrée, un de sortie) avec mkpipe(). Puis on fork(), ce qui duplique ces deux flux dans le processus fils. Le fils ferme alors le flux de lecture du pipe, et le père ferme le flux d'écriture dans le pipe. Ensuite le fils ferme stdout (handle 1) et stderr (handle 2) et les rouvre en dupliquant le handle d'écriture dans le pipe. Si le programme1 n'a pas besoin de lire depuis stdin on peut laisser stdin dupliqué dans le fils. Mais on peut effectuer la même redirection depuis un autre pipe du père au fils. Ensuite le fils n'a plus qu'à faire un exec() du programme1, et le père (qui exécute programme2) peut lire les données du fils depuis le handle de lecture du pipe qu'il a créé. Si le fils se termine, le pipe sera brisé, et le père en sera averti par un erreur PIPE_BROKEN en lisant dans le pipe qui devait renvoyer la suite des messages de sortie et d'erreur du fils.

 

[edit]--Message édité par verdy_p--[/edit]

n°21589
gilou
Modérateur
Modzilla
Posté le 31-03-2001 à 03:13:08  profilanswer
 

Oui, c'etait un lapsus calami: je voulais dire que ca redirigeait stderr dans stdout (et non pas stdin).
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°21591
JWhy
je peux plier (héhé)
Posté le 31-03-2001 à 05:37:10  profilanswer
 

Eventuellement et si tu n'as pas de reponses, tu peux demander a MiniCooler (generalement present sur le forum seti de hardware.fr) comment il a fait pour son SetiCommander...  
 
Tu peux aussi essayer de contacter MashRinx, membre des Team Primordial Soup et Team Egg Roll (team g@h et f@h chez Ars Technica), egalement auteur des logiciels GenomeVoyeur et FoldingVoyeur qui permettent (entre autres) de monitorer la progression du calcul.  
 
ps: et si ca se trouve, tu ne vas meme pas avoir besoin de faire ton logiciel si ceux ci te conviennent ;)


---------------
www.alliancefrancophone.org ... Home is where the heart is
n°21602
ManX
Posté le 31-03-2001 à 10:11:31  profilanswer
 

Salut JWHy .... désolé, je t'ai dis il y a qq temps que je mettais une machine sur f@h ... mais en RTC ... je vais me ruiner :crazy:  ... alors je reste sur g@h.
 
Je vais encore me creuser la tête pour mon problème (c'est surtout pour estimer le temps... mais je vais essayer de m'y prendre autrement) ... qui ne se pose pas par ailleur avec f@h, car le client créé une sortie sur scrlog.txt.
Quant à GV http://www.zerothelement.com/hosted/gv.shtml  ...euh ...ben ... je tourne sous GNU/linux ... et pis zut ... y'a pas les sources ;)  
et puis, c'est en forgeant qu'on devient forgerons.... sinon j'apprendrai jamais ;)

n°21635
JWhy
je peux plier (héhé)
Posté le 31-03-2001 à 21:43:49  profilanswer
 

ah oui pardon... j'avais pas vu le mot "shell"  :o


---------------
www.alliancefrancophone.org ... Home is where the heart is

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  Récupérer une ligne 'stdout'

 

Sujets relatifs
[JAVASCRIPT]Comment récuperer les coordonné de la sourisVB : Kel est la fonction qui permet de recuperer la date du jour ?
recuperer un truc efface de la Corbeille!![BATCH] pour recuperer son IP [HELP]
[PHP] impossible de récupérer HTTP_USER_AGENT !?Récupérer la résolution de l'écran avec Delphi
Comment récupérer la taille physique d'un disque dur ?récupérer la taille d'un fichier en C
[ASP] Recuperer le nom d`un bouton de formulaire du type SUBMITtracer une ligne en langage C
Plus de sujets relatifs à : Récupérer une ligne 'stdout'


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR