Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

récupérer un objet externe

11 réponses
Avatar
titouille
Bonjour !!

Je travaille bcp avec Flash, et j'aurai voulu faire des interactions
avec un serveur socket en python. Flash utilise du XMLSocket mais peut
passer n'importe quoi, pas uniquement du XML. Je pensais donc essayer de
passer des objets Flash (classe native Object).
Seulement, lorsque je récupère une valeur avec python, j'ai bien un
"object Object" mais je n'arrive pas à récupérer ses attributs...
Lorsque je passe un tableau, par contre, ça fonctionne, je peux
récupérer les valeurs...

Y a-t-il un moyen de savoir le contenu d'une variable, par exemple comme
la commande print_r en php ?? ou y a-t-il un moyen de désérialiser
l'objet récupéré ?? ou bien ai-je intérêt à passer par de simples
tableaux et recréer un objet avec une classe python ?`

merci pour vos suggestions :)

Thierry

10 réponses

1 2
Avatar
Michel Claveau - abstraction méta-galactique non triviale en fuite perpétuelle.
Bonsoir !

Les objets Python et les objets Flash n'ont pas grand chose en commun. En
voulant interfacer les deux, tu vas avoir deux possibilités :
- Passer des valeurs ; dans ce cas, les objets restent dans leur espace,
restent indépendants, et il faudra travailler avec les valeurs transférées.
- passer un handle (sur un objet) entre les deux programmes ; et alors,
il faudra TOUT gérer.


Mais il y a d'autres possibilités :
- Flash possède une commande de retour d'informations au logiciel
appelant ; de mémoire, "fscommand" (à vérifier).
- Flash existe aussi comme active-X, appelable depuis wxPython ou
Internet-Explorer (entre autres ?)
- Python peut être utilisé comme serveur COM, appelable depuis Flash,
sans problèmes particuliers

Ces possibilités présentent l'avantage de donner un espace d'exécution
commun aux deux langages/logiciels.

Bonne soirée
--
Michel Claveau
Avatar
titouille
Michel Claveau - abstraction méta-galactique non triviale en fuite
Bonsoir !

Bonjour !! :) merci pour cette réponse !!


Les objets Python et les objets Flash n'ont pas grand chose en commun. En
voulant interfacer les deux, tu vas avoir deux possibilités :
- Passer des valeurs ; dans ce cas, les objets restent dans leur espace,
restent indépendants, et il faudra travailler avec les valeurs transférées.
- passer un handle (sur un objet) entre les deux programmes ; et alors,
il faudra TOUT gérer.


Oki, donc passer des valeurs, ça serai par exemple utiliser des array,
qui sont sérialisable/désérialisable à souhait, et passer le handle,
c'est directement passer l'objet, tel que j'aurai voulu le faire...
Alors quand tu parle de TOUT gérer, c'est à dire ?? je devrai recréer
une classe "object" en python et sérialiser mon objet ?? comment puis-je
faire en sorte de récupérer son contenu ?? y a moyen ??


Mais il y a d'autres possibilités :
- Flash possède une commande de retour d'informations au logiciel
appelant ; de mémoire, "fscommand" (à vérifier).
- Flash existe aussi comme active-X, appelable depuis wxPython ou
Internet-Explorer (entre autres ?)
- Python peut être utilisé comme serveur COM, appelable depuis Flash,
sans problèmes particuliers

Ces possibilités présentent l'avantage de donner un espace d'exécution
commun aux deux langages/logiciels.


Tout à fait d'accord, mais toutes ces possibilités se limites à du
windows, si je ne me trompe pas... fscommand, ça c'est sur, ne
fonctionne que pour windows.
L'activeX est également pour windows et pas autre chose, et quand tu me
parle de serveur COM, la je crois que j'ai pas trop de doutes non plus
sur la "non"-portabilité de telles solutions.
En fait, ce que j'aurai trouvé intéressant, c'est de pouvoir balancer un
objet de ce type :

// déclaration flash
obj = new Object();
obj.alias = "FlashOpenFile";
obj.userid = 12;
obj.credentials = "toto/pwd";
obj.returntrue = -1;
obj.returnfalse = -1;
// ici encore un objet, avec la syntaxe rapide...
obj.params = { param1:"x", param2:"y", param3:1, param4:true };

Le but serai ensuite de pouvoir passer seulement les params qu'on veut,
sans pour autant devoir tous les spécifier... et la récupération
s'effectuerai grace au nom d'attribut... et comme les paramètres sont
d'un nombre indéfinis, de types indéfinis et leur nom change à chaque
fois, j'aurai aimé trouver une solution digne d'intérêt, plutot que de
devoir passer par des arrays et passer les params obligatoirement les
uns après les autres, tout en respectant leur ordre, etc...

Genre j'ai une méthode FlashOpenFile qui prend en param "msg",
"defaultDir", "defaultFileName", "wildcard"..

avec un objet, je pourrai faire :

obj.params = { msg:"open file", defaultDir:"C:", wildcard:"*.ini" };

avec des talbeaux, je suis obligé de travailler avec les indices, et
même si je n'ai pas besoin de passer certains paramètres, je suis obligé
de le faire pour garder l'ordre et ne pas faire planter l'exécution de
la méthode...

Enfin bref, si quelqu'un à une solution plus ou moins viable, ça
m'intéresserai bien :)




Bonne soirée



Merci, à toi aussi :)


A++

Thierry

Avatar
Michel Claveau - abstraction méta-galactique non triviale en fuite perpétuelle.
Re

D'abord, je ne peux parler que sous windows, ayant trop peu d'expérience
sous d'autres OS.

Je n'ai pas travaillé avec Flash particulièrement, parce que je trouve que
l'accès aux éléments de l'environnement d'exécution est trop difficile. En
comparaison, avec Internet-Explorer, le DOM (modèle-hiérarchique-objet) est
clairement défini, et accessible de l'intérieur, comme de l'extérieur. Je
m'oriente donc plutôt vers une intégration Internet-explorer <--> Python. Je
suis en expérimentation, et ça avance doucement.



Concernant les serveurs COM.

C'est une "technologie" qui a très proche des active-X (évènements et aspect
graphique en moins ; facilité d'intégration en plus).


Concernant les échanges de données.

Un handle, c'est un pointeur. Sous windows, c'est un entier long. Si tu
transfères un handle de flash vers Python, tu vas récupérer un entier long.
Si tu veux utiliser cette méthode, il te faudra donc te débrouiller pour
savoir ce qu'il y a derrière ce handle. Ce peut être simplement la zone
mémoire où sont les données, mais cela peut aussi être une collection de
pointeurs, qui renvoient vers des fonctions, des propriétés, des données,
des structures, etc.

De plus, sous windows, il y a une histoire d'espace d'exécution. Il peut
arriver que le programme qui lit le handle n'ait pas accès à la zone mémoire
du programme qui a fourni le handle. Cela pour des questions évidentes de
sécurité.

J'ai une seule utilisation des handles. Entre Paradox et Python (avec
cTypes). Paradox envoie un handle sur une variable string, binary, ou
graphique. Sous Python, j'utilise une DLL, pour faire des transferts
directs, entre la variable paradox et une "variable cTypes". Cela
fonctionne, mais uniquement parce que, dans Paradox, une telle variable ne
bouge pas en mémoire, et parce que Python est appelé via un serveur COM,
donc dans le même espace d'exécution.

Lorsque j'avais essayé avec d'autres variables Paradox (number, mémo,
tableaux, structures, tcursor, enregistrements, uiobject, etc.), je n'ai
jamais pu trouver les données elles-mêmes.

Autre échec, aussi, en essayant d'utiliser Python depuis un autre process
(les espaces de données étant mutuellement non accessibles).


Bref, je te conseille fortement de travailler sur l'échange de valeurs,
plutôt que de pointeurs d'objets (handle).


@-salutations
--
Michel Claveau
Avatar
Wilk
"Michel Claveau - abstraction méta-galactique non triviale en fuite perpétuelle." writes:

Re

D'abord, je ne peux parler que sous windows, ayant trop peu d'expérience
sous d'autres OS.

Je n'ai pas travaillé avec Flash particulièrement, parce que je trouve que
l'accès aux éléments de l'environnement d'exécution est trop difficile. En
comparaison, avec Internet-Explorer, le DOM (modèle-hiérarchique-objet) est
clairement défini, et accessible de l'intérieur, comme de l'extérieur. Je
m'oriente donc plutôt vers une intégration Internet-explorer <--> Python. Je
suis en expérimentation, et ça avance doucement.


Est-ce que tu saurais lancer une fenêtre IE sans aucune décoration, sans
pouvoir saisir d'url ni avoir de boutons précédents etc ?

Le but serait de ne se servir que du rendu html en transmettant une
url. Peut-être est-ce possible en ligne de commande ?

--
Wilk - http://flibuste.net

Avatar
Michel Claveau - abstraction méta-galactique non triviale en fuite perpétuelle.
Bonsoir !

Est-ce que tu saurais lancer une fenêtre IE sans aucune décoration, sans
pouvoir saisir d'url ni avoir de boutons précédents etc ?



Le but serait de ne se servir que du rendu html en transmettant une url.
Peut-être est-ce possible en ligne de commande ?

Actuellement, j'arrive à lancer I.E. sans la barre de bouton, ni les menus
(facile, il suffit de renommer le fichier .htm en .hta, ensuite, sous
windows XP, ou 2000, il suffit de lancer le fichier).

J'arrive également, depuis Python, à lancer I.E., sans url (vide about:blank). Ensuite, depuis Python, j'arrive à injecter du HTML, puis,
ensuite, à récupérer le contenu (complet) de la page. Par exemple, s'il
s'agit d'un formulaire, je récupère les informations saisies par un
utilisateur, sans être passé par la Web.

Pour cela, je pilote IE par Dispatch de win32com. Malheureusement, je ne
peux pas (encore ?) piloter du .hta de cette façon.

Alors, pour pouvoir faire du hta, je cherche dans une autre direction :
faire un script HTA (ou html) autonome, qui appelle Python via un serveur
COM. A cette fin, j'ai créé une page avec du javascript pour créer, à la
volée, des labels, des champs, et des boutons. Pour l'instant, ça marche,
mais j'ai encore pas mal de boulot, pour harmoniser tout ça, et le rendre
réellement exploitable.

Mon objectif, c'est de pouvoir faire une démo fin octobre, lors de la
convention Paradox, en Allemagne.



Il y a une autre piste, que je regarderai plus tard, l'option "kiosque"
d'IE (avec iexplore -k)
Et un truc marrant, on peut alors utiliser le fond du bureau comme GUI ;
j'ai essayé : ça fonctionne !




Et, pour ta question, fais l'essai suivant : enregistre le code suivant :

<HTML>
<BODY bgColor=#ffffcc>
<DIV alignÎnter><STRONG><EM>Bonsoir, <FONT color=#ff0000 size=5>Wilk
</FONT>!<BR>
<BR>
<FONT color=#000080>Cette page est un exemple d'utilisation d'un .HTA</FONT>
<BR>
<BR>
<BR>
Pour aller plus loin : <BR>
<BR>
<A href="mailto:"><EM></A><BR>
</EM>
</DIV>
</BODY>
</HTML>

dans un fichier "MCI.HTA" ; puis lance ce fichier (en ligne de commande,
par exemple).



@-salutations
--
Michel Claveau
mél : http://cerbermail.com/?6J1TthIa8B



Avatar
Wilk
"Michel Claveau - abstraction méta-galactique non triviale en fuite perpétuelle." writes:

Bonsoir !

Est-ce que tu saurais lancer une fenêtre IE sans aucune décoration, sans
pouvoir saisir d'url ni avoir de boutons précédents etc ?



Le but serait de ne se servir que du rendu html en transmettant une url.
Peut-être est-ce possible en ligne de commande ?

Actuellement, j'arrive à lancer I.E. sans la barre de bouton, ni les menus
(facile, il suffit de renommer le fichier .htm en .hta, ensuite, sous
windows XP, ou 2000, il suffit de lancer le fichier).


C'est exactement ce qu'il me faut... Je fait des web applications, et
parfois elles sont toutes petites du coup ça fait un peu bizare d'avoir
à lancer un navigateur juste pour cliquer sur un bouton et voir une
liste s'afficher... Mais je n'ai vraiment plus envie de faire du gui
classique...

Par contre, je ne m'embête pas à essayer de dialoguer directement avec
le navigateur, je fait une appli serveur qui écoute sur un port, et je
lance le navigateur pour y accéder, comme n'importe quel serveur
internet... C'est très pratique car ça peut fonctionner sur un réseau et
même à travers internet sans rien changer.

Avec ton exemple, la première page est nikel, par contre, s'il y a un
lien il ouvre une autre fenêtre IE... Comment faire pour que ça reste
dans la même fenêtre ?

--
Wilk - http://flibuste.net




Avatar
Michel Claveau - abstraction méta-galactique non triviale en fuite perpétuelle.
Re

Je pense que, pour contrôler au mieux le comportement des liens (et de
beaucoup d'autres choses), il faut passer par les CSS. Sinon, il est
possible de définir soi-même les liens.

Concernant l'interfaçage, passer par un serveur web est aussi une solution,
que je n'ai pas exclue. Je ferai peut-être un module javascript qui accepte
plusieurs possibilités de communication avec les parties en Python.

Bonne nuit.
--
Michel Claveau
Avatar
Wilk
"Michel Claveau - abstraction méta-galactique non triviale en fuite perpétuelle." writes:

Re

Je pense que, pour contrôler au mieux le comportement des liens (et de
beaucoup d'autres choses), il faut passer par les CSS. Sinon, il est
possible de définir soi-même les liens.


Je ne comprend pas ce que tu veux dire... Ni le rapport avec les CSS...

Est-ce qu'il est possible dans la fenêtre sans décoration de visiter un
site web ?

ps, si quelqu'un à la méthode pour mozilla ça m'intéresse aussi...

--
Wilk - http://flibuste.net

Avatar
Michel Claveau - abstraction méta-galactique non triviale en fuite perpétuelle.
Bonsoir !

Pour avoir utilisé le module active-X d'Internet-Explorer, je confirme la
possibilité de naviguer sur internet, dans un rectangle, sans barre
d'outils, ni menu.
Internet-explorer se présente alors exactement comme une image, dans une
partie d'une fenêtre ; mais cette image est active.

J'avais réussi à refaire à peu près la même chose avec wxPython (si ça
t'intéresse, j'ai un script de 25 lignes).



Pour les CSS, c'est simplement que lorsque l'on travaille avec un fichier
HTML local, on peut les utiliser pour modifier l'aspect et le comportement
des liens de la page.
Avatar
Wilk
"Michel Claveau - abstraction méta-galactique non triviale en fuite perpétuelle." writes:

Bonsoir !

Pour avoir utilisé le module active-X d'Internet-Explorer, je confirme la
possibilité de naviguer sur internet, dans un rectangle, sans barre
d'outils, ni menu.
Internet-explorer se présente alors exactement comme une image, dans une
partie d'une fenêtre ; mais cette image est active.

J'avais réussi à refaire à peu près la même chose avec wxPython (si ça
t'intéresse, j'ai un script de 25 lignes).


Non merci, mon but est justement de ne pas avoir à trimbaler wxPython...




Pour les CSS, c'est simplement que lorsque l'on travaille avec un fichier
HTML local, on peut les utiliser pour modifier l'aspect et le comportement
des liens de la page.


Je connais les CSS pour modifier la présentation, mais le comportement ???

--
Wilk - http://flibuste.net

1 2