La commande PHP exec () ne lancera pas de script python avec sendkeys

Première note: Désolé, c’est long. Je voulais être minutieux. Je déteste vraiment poser une question quand il ya tellement de choses en ligne, mais cela fait une semaine de recherche et je n’ai rien à montrer. J’apprécierais vraiment de l’aide. Je suis un noob mais j’apprends très vite et je suis plus que désireux d’essayer d’autres langues ou quoi que ce soit d’autre.

L’objective: Ce que j’essaie de faire est de construire une télécommande Netflix (usage personnel uniquement) qui contrôle Netflix sur le serveur (Windows 7 PC 32 bits) via des raccourcis clavier (exemple: barre d’espace pour mettre en pause) une page php sur mon ipod touch ou mon téléphone Android. Actuellement, la télécommande utilise USBUIRT pour contrôler le téléviseur et les périphériques IR sans problème. Si vous avez d’autres méthodes (que je peux construire, pas acheter) pour suggérer ou d’autres langues que je pourrais apprendre qui peuvent y parvenir, je suis heureux d’apprendre.

Le problème: les commandes exec () et system () de PHP ne lancent pas le script python (ni un exe compilé avec py2exe) qui appuie simplement sur la touche Windows (destinée à appuyer sur la touche du serveur, pas sur la machine chargeant la page php) . Je peux utiliser UUTX.exe en transmettant des arguments avec exec () pour contrôler les périphériques IR sans problème. Mais mes fichiers exe, py, ni pyw fonctionnent. J’ai même essayé d’appeler un fichier de commandes qui lance le script python et ce lot ne sera pas lancé. La page est actualisée et aucune erreur ne s’affiche.

Tentative: Voici un code qui fonctionne

$exec = exec("c:\\USBUIRT\\UUTX.exe -r3 -fC:\\USBUIRT\\Pronto.txt LED_Off", $results);

Voici quelques tentatives qui ne fonctionnent pas

$exec = exec("c:\\USBUIRT\\test.py", $results);

$exec = exec("python c:\\USBUIRT\\test.py", $results);

$exec = exec("C:\\python25\\python.exe c:\\USBUIRT\\test.py", $results);

Tous ceux que j’ai essayés sans les doubles backslashes et avec des barres obliques et des doubles barres obliques. Je suis parti en le passant à variable $ exec et cela ne fait aucune différence. $ result output Arrayssortingng (9) ”

Copier tout dans exec () en ligne de commande fonctionne correctement. J’ai essayé de déplacer le fichier dans le dossier htdocs, de modifier les permissions de dossier et de m’assurer que je ne suis pas en safemode en php. Var_dump retourne: Array “L’utilisation d’une boucle foreach ne fournit aucune information à partir du tableau. Mes journaux pour Apache uniquement

[Sat Sep 10 19:54:09 2011] [error] [client 127.0.0.1] File does not exist: C:/Program Files/Apache Software Foundation/Apache2.2/htdocs/announce

Configuration: Apache 2.2, python 2.5 et php 5.3. Exécuter ceci sur Windows 7 et ne vous connecter que sur le réseau local, pas de VPN ou similaire. Étant donné tous les dossiers associés (python, htdocs, le fichier cmd.exe, le dossier usbuirt), IUSR, les administrateurs, les utilisateurs et tout le monde avec un contrôle complet pour les tests initiaux (plus tard, je renforcerai la sécurité). Le mode sans échec est également désactivé sur php.

Notes: Ce code que j’ai vu sur un autre problème similaire ne fonctionne pas:

exec("ping google.com -n 1");

Aucune erreur dans error.log ni dans l’observateur d’événements. Le mettre dans ob_start (); et obtenir les résultats avec ob_get_clean (); ne me donne absolument rien. Pas de texte ou rien du tout. J’ai essayé beaucoup plus, mais j’ai déjà écrit un roman ici, alors je vais devoir répondre au rest. Je posterai la source php complète ou le script python si cela est nécessaire, mais il suffit d’importer des clés d’envoi et d’appuyer sur la touche Windows pour ouvrir le menu Démarrer comme test visuel de base. Je ne sais pas si ses permissions, la façon dont j’ai installé ma configuration, mon codage … Je ne sais tout simplement plus. Et encore une fois, je suis désolé que ce soit si long et si vous répondez, j’apprécie vraiment que vous preniez le temps de lire tout cela pour aider un inconnu.

Le serveur PHP exécutant le script s’exécute très probablement sous un autre nom d’utilisateur (service réseau) que le compte connecté à la console graphique. Je pense que ce type d’installation peut fonctionner sous XP et / ou avec le champ “interactif” activé sur le service. Cependant, je crois que Vista / 7 est bloqué pour des raisons de sécurité . Les détails sont un peu flous car je suis maintenant devant une boîte Linux.

Une solution serait d’exécuter php manuellement dans la session qui exécute netflix et de réessayer. Si cela ne fonctionne pas, j’ai déjà écrit un simple client / serveur en python qui prend les commandes clés et les convertit en séquences de touches. Était assez facile à faire.

C’est grâce à l’excellente aide de Winston Ewert et de Gringo Suave.

Je définis le service Apache sur le compte système local et lui donne access pour interagir avec le bureau. Cela devrait aider si vous avez Windows XP ou Server 2003, mais Vista et plus récent, il y a une détection de services interactifs qui apparaît lorsque vous essayez de lancer des applications GUI à partir de PHP. Chaque commande s’exécutait correctement, mais le faisait dans la session 0, car Apache était installé en tant que service. Pour la plupart des gens, je pense que réinstaller sans installer Apache en tant que service fonctionnerait, mais je pensais quand même passer à XAMPP, donc désinstaller Apache m’a aidé à prendre ma décision.

En fin de compte, tous les codes que j’ai écrits dans mon message d’origine fonctionnent désormais correctement et mon projet peut aller de l’avant. J’espère que quelqu’un d’autre trébuche sur ce point et obtient autant d’aide de Winston Ewert et de Gringo Suave que moi! Merci beaucoup à tous les deux!