2010-12-06 11 views
1

J'essaie de comprendre comment afficher la sortie (et lire l'entrée) en temps réel dans un processus lancé par PHP sur la ligne de commande. Il semble y avoir beaucoup de solutions de rechange: shell(), exec(), system(), popen(), proc_open()Exécuter le processus en temps réel

et il n'est pas complètement clair pour moi quelles sont les différences. Tout ce dont j'ai besoin est d'exécuter un processus, d'afficher sa sortie sur le même terminal où le script PHP est appelé, peut-être lire l'entrée et enfin revenir au flux de script PHP quand le processus se termine. Parmi les options que j'ai énumérées, proc_open() est probablement capable de le faire, mais cela semble trop compliqué, car tout ce que je veux faire est de donner le contrôle à un processus externe et attendre qu'il se termine. Il y a quelques questions qui semblent liées, mais pour autant que je puisse voir, il s'agit en fait d'envoyer le processus en arrière plan (ce que je ne veux pas) ou d'afficher la sortie dans un navigateur (ce qui n'est pas mon cas, tout est dans un terminal).

+1

Pouvez-vous spec ce que vous entendez par « temps réel »? Cela fera une différence dans le genre de réponses que vous obtenez. Par exemple, «temps réel» en termes de perception humaine est différent de «temps réel» en termes de système de contrôle dans une centrale nucléaire. – rcravens

+0

Je veux dire en temps réel dans le sens de la perception de l'utilisateur. Le point est que par exemple shell() donnera toute la sortie du processus ensemble, quand il est fini. – Andrea

Répondre

2

Utilisez pcntl_fork() et pcntl_exec() comme this

+0

Cela semble ce que je cherche. Est-il possible de faire la même chose, mais entrez une commande shell plutôt que le chemin de l'exécutable et les arguments? Cela simplifierait un peu les choses. – Andrea

+0

Fantastique! Merci beaucoup! – Andrea

+0

@Andrea: Je ne suis pas sûr si pcntl_exec() fonctionne avec les commandes intégrées au shell. Mais si vous voulez faire par exemple 'ls' vous pouvez rapidement générer un script shell (ligne she-bang plus le' ls') avec PHP, l'écrire dans un fichier sur le disque, rendre le fichier exécutable et passer son chemin vers pcntl_exec. – rik

0

Peut-être this result sur Google Code Search peut vous aider. Pour autant que je sache, il fait quelque chose de très similaire à ce que vous cherchez, y compris l'extraction de la sortie de STDOUT et (éventuellement) l'entrée via STDIN.