PHP exec () kommandoen vil ikke starte python script ved hjælp af send keys

Indlæg af Hanne Mølgaard Plasc

Problem



Første note: Beklager, det er længe. Ønsket at være grundig.
Jeg hader virkelig at stille et spørgsmål, når der er så meget derude online, men det har været en uge med at søge, og jeg har intet at vise for det. Jeg vil virkelig sætte pris på lidt hjælp. Jeg er en noob, men jeg lærer meget hurtigt og er mere end villig til at prøve alternative sprog eller hvad det ellers kan tage.


Målet:
Hvad jeg forsøger at gøre er at opbygge en Netflix-fjernbetjening (kun til personlig brug), der styrer Netflix på serveren (Windows 7 PC 32-bit) via tastaturgenveje (eksempel: mellemrumstasten til pause), efter at der trykkes på en knap på en php-side på min iPod touch eller Android-telefon. I øjeblikket bruger fjernbetjeningen USBUIRT til at styre tv- og IR-enhederne uden problem. Hvis du har andre metoder (som jeg kan bygge, ikke købe) for at foreslå eller andre sprog, kunne jeg lære at kunne opnå dette , Jeg er glad for at lære.


Problemet:
PHP 's exec () og system () kommandoer vil ikke starte python scriptet (eller en exe kompileret med py2exe), der blot trykker på Windows-tasten (beregnet til at trykke på tasten på serveren, ikke maskinen indlæser php-siden). Jeg kan bruge USBUIRTs UUTX.exe passerende argumenter med exec () til at styre IR-enheder uden problem. Men mine exe, py eller pyw filer arbejder. Jeg har endda forsøgt at kalde en batchfil, der lancerer python scriptet, og at batchen ikke starter. Siden opdateres og der vises ingen fejl.


Forsøgte:
Her er en kode, der virker


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


Her er et par forsøg, der ikke virker


$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);


Alle dem, jeg har prøvet uden de dobbelte tilbageslag og med skråstreg og to skråstreger fremad. Jeg har afvist at overføre den til variabel $ exec, og det gør ingen forskel. $ resultat outputs
Arraystring (9) '


Kopiering af alt i exec () til kommandolinjen virker korrekt. Jeg har forsøgt at flytte filen til htdocs-mappen, ændrede mappefunktioner og sørgede for, at jeg ikke er i safemode i php. Var\_dump returnerer: Array 'Brug af en foreach loop giver ingen information fra array.
Mine logfiler til Apache viser kun


[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


Opsætning: Apache 2.2, Python 2.5 og Php 5.3. Kører dette på Windows 7 og kun tilslutte til det lokale netværk, ingen vpn eller lignende. Med hver tilknyttet mappe (python, htdocs, cmd.exe filen, usbuirt folder) IUSR, admins, brugere og alle med fuld kontrol kun til indledende testning (senere vil jeg selvfølgelig stramme sikkerhed op). Den sikre tilstand er slukket php også.


Noter: Denne kode jeg så på et andet lignende problem virker ikke:


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


Ingen fejl i error.log eller event viewer. Sætte det inde ob\_start (); og få resultaterne med ob\_get\_clean (); giver mig absolut ingenting. Ingen tekst eller noget overhovedet. Jeg har prøvet meget mere, men jeg har allerede skrevet en roman her, så jeg skal bare svare resten mens vi går. Jeg sender hele php-kilden eller python-scriptet, hvis det er nødvendigt, men alt det gør er import sendkeys og tryk på windows-tasten for at åbne startmenuen som en grundlæggende visuel test. Jeg ved ikke, om dens tilladelser, den måde, jeg har min opsætning på, min kodning ... Jeg ved bare ikke mere. Og igen jeg undskylder det er så længe, ​​og hvis du svarer, sætter jeg mig virkelig pris på, at du tager dig tid til at læse alt dette for at hjælpe en total fremmed.

Bedste reference


PHP-serveren, der kører scriptet, kører sandsynligvis som en anden bruger (netværkstjeneste) end den konto, der er logget ind på GUI-konsollen. Jeg tror, ​​at denne form for opsætning kan fungere under XP, og/eller med det 'interaktive' felt aktiveret på tjenesten. Men jeg tror på Vista/7 det er blokeret af sikkerhedsmæssige grunde. Detaljer er lidt uklar som jeg er nu foran en Linux-boks. [7]


En løsning ville være at køre php manuelt i sessionen, der kører netflix og prøv igen. Hvis dette ikke virker, skrev jeg engang en simpel klient/server i python, der tager nøglekommandoer og konverterer dem til tastetryk. Var ret let at gøre.

Andre referencer 1


Fik det ud takket være den fremragende hjælp fra Winston Ewert og Gringo Suave.


Jeg satte Apache 's service på den lokale systemkonto og gav den adgang til at interagere med skrivebordet. Dette skal hjælpe, hvis du har Windows XP eller Server 2003, men Vista og nyere er der en Interaktiv Service Detection, der dukker op, når du prøver at starte GUI applikationer fra php. Hver kommando blev udført korrekt, men gjorde det i session 0. Dette skyldes, at Apache blev installeret som en tjeneste. For de fleste tror jeg at geninstallere uden at oprette Apache som en tjeneste ville fungere, men jeg overvejede at flytte til XAMPP alligevel, så at skulle afinstallere Apache hjalp med at presse min beslutning.


I sidste ende arbejder alle de koder, jeg skrev i min oprindelige post, som et resultat, og mit projekt kan bevæge sig fremad. Jeg håber en anden snuble over dette og får så meget hjælp fra Winston Ewert og Gringo Suave som jeg gjorde! Mange tak, tak!