OVH Cloud OVH Cloud

stdout, cat

3 réponses
Avatar
R12y
Bonjour,

Soit un fichier video "video.ogg" au format ogg/theora. Je voudrais le
"catter" de manière à ce que le programme ce comporte comme 'cat' (sous
Unix). La sortie standard sera en effet pipé en stdin par 'ezstream'.

Le but est que mon programme python prenne un fichier video, puis le
balance en stdout, puis en prenne un autre, puis le balance aussi en
stdout et ainsi de suite. Quand au choix du fichier à "stdouter", c'est
moi qui ferai l'algo. J'ai tout simplement besoin d'un petit coup de main
pour définir comment balancer une liste de fichiers binaires sur le stdout
"proprement".

Il n'est pas question de lancer plusieurs ezstream parallellement.
Seulement un.

Je fais ça pour une webTV, parceque le nombre de fichiers à balancer dans
ezstream n'est pas forcément su à l'avance, qu'il faut les ordonner
suivant leur nom, qu'il ne faut pas couper le pipe quand on change de
fichier.

ezstream: http://www.icecast.org/ezstream.php

Merci pour toute aide.

--
Telephone portable "intelligent" (SmartPhone) GSM, GPRS,...
Il est sous Linux, ne coute pas trop cher,...
http://www.it2l.com/product_info.php?cPath=91&products_id=456

3 réponses

Avatar
Eric Jacoboni
R12y writes:

Soit un fichier video "video.ogg" au format ogg/theora. Je voudrais le
"catter" de manière à ce que le programme ce comporte comme 'cat' (sous
Unix). La sortie standard sera en effet pipé en stdin par 'ezstream'.


Je ne comprends pas bien le pb... cat sait très bien envoyer un
fichier binaire sur stdout, pour la bonne et simple raison qu'il n'y a
pas de notion de fichier binaire/texte sous Unix... donc en Python tu
écrit ton contenu de fichier sur stdout (avec sys.stdout.write) et c'est tout.

Si tu demandes une solution pour Windows où là, effectivement, le pb
se pose, il faut utiliser le module msvcrt et sa fonction setmode()
pour mettre stdout en mode binaire.

import msvcrt
msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)

ou alors lancer l'interpréteur avec l'option -u.
--
Eric Jacoboni, ne il y a 1437676563 secondes

Avatar
R12y
On Sat, 10 Dec 2005 18:43:08 +0100, Eric Jacoboni wrote:

donc en Python tu
écrit ton contenu de fichier sur stdout (avec sys.stdout.write) et c'est tout.


J'avais vu ce truc lors de mes recherches. Et il convient à ce que je veux
faire. Il y avait aussi d'autres solutions, mais bon, puisque
sys.stdout.write est fait pour, pourquoi ne pas l'utiliser. Mais:

- comment est-ce que ça se gère quand il y a plusieurs fichier à balancer?
- je ne connais pas suffisament la programmation pour savoir ce qui va se
passer si j'ai 500 fichiers à stdouter: si le programme qui pipe ne suit
pas, il va y a vaoir "amoncellement" non? ou bien non?
Je dis ça parceque 'ezstream', qui prendra mon stdout sur son stdin lui
doit acheminer le flux vers un serveur 'icecast', mais cette fois-ci en
débit réel (~256Kbps). Mais comme je sais que ça va arriver très vite sur
son stdin et ne pas ressortit aussi vite à sa sortie...

--
Telephone portable "intelligent" (SmartPhone) GSM, GPRS,...
Il est sous Linux, ne coute pas trop cher,...
http://www.it2l.com/product_info.php?cPath‘&products_idE6

Avatar
Eric Jacoboni
R12y writes:


- comment est-ce que ça se gère quand il y a plusieurs fichier à
balancer?


Tu les balances les uns après les autres... le pipe fera le reste.

- je ne connais pas suffisament la programmation pour savoir ce qui va se
passer si j'ai 500 fichiers à stdouter: si le programme qui pipe ne suit
pas, il va y a vaoir "amoncellement" non? ou bien non?


Le pipe synchronisera les programmes qui écrivent.

Je dis ça parceque 'ezstream', qui prendra mon stdout sur son stdin lui
doit acheminer le flux vers un serveur 'icecast', mais cette fois-ci en
débit réel (~256Kbps). Mais comme je sais que ça va arriver très vite sur
son stdin et ne pas ressortit aussi vite à sa sortie...


Ah, ben ça c'est le pb de ezstream, pas du programme qui lui fournit
les entrées.
--
Eric Jacoboni, ne il y a 1437683009 secondes