2010-07-18 7 views
1

Puis-je simplement exécuter un programme Python en utilisant PHP comme ça? (Dans un navigateur)Exécuter le programme Python en utilisant PHP

exec("python myProgram /Applications/MAMP/htdocs/somefile.xml"); 

ou comme ceci:

exec("/path/to/python path/to/myProgram /Applications/MAMP/htdocs/somefile.xml"); 

Est-ce une bonne méthode de?

Sinon, quelle devrait être la bonne façon de le faire?

Merci

+1

Une raison particulière pour laquelle vous ne pouvez pas utiliser PHP ou Python seulement? C'est à dire: Vous pouvez traduire le programme python en php – quantumSoup

+0

Je génère une chaîne XML en utilisant PHP et ensuite cela doit être passé au script python en entrée. Comme je le fais dans mes fenêtres de terminal: >>> myprogram myfile.xml .... en gros le script python accepte un fichier xml et le traite pour générer un fichier de police. – ssdesign

+0

Quel est ce programme python que vous utilisez? – quantumSoup

Répondre

1

je préférerais en utilisant proc_open() comme suggéré par MVDS que vous pouvez N'écrivez pas dans STDIN et ne lisez pas à partir de STDOUT avec exec()/shell_exec(), mais fournissez votre propre jeu de variables d'environnement - $_ENV.

Un extrait de l'échantillon extrait de mon code:

$process = proc_open(
    "{$command}", 
    array(   
    array('pipe', 'r'), 
    array('pipe', 'w'), 
    array('pipe', 'w') 
    ), 
    $pipes, 
    NULL, 
    $_ENV 
); 

if(is_resource($process)){ 

    fwrite($pipes[0], $string); 
    fclose($pipes[0]); 

    $rt = stream_get_contents($pipes[1]); 
    fclose($pipes[1]); 

    $rtErr = stream_get_contents($pipes[2]); 
    fclose($pipes[2]); 

    $exitCode = proc_close($process); 

} 

En savoir plus: http://php.net/manual/en/function.proc-open.php

0

Oui, pourquoi pas? Notez que vous n'exécutez pas ce "dans le navigateur" mais plutôt du côté serveur, pendant le pré-traitement de la page. Considérons que la page ne retournera pas tant que le exec n'est pas terminé, cela dépend donc de ce que vous essayez de faire exactement.

+0

Fondamentalement, j'ai un programme python que je suis capable de lancer avec succès comme ceci dans le terminal (sur mac): >>> myptogramme myfile.xml ..... Maintenant, j'essaie d'atteindre la même chose en utilisant PHP. Si je fais comme je l'ai montré dans mon post, le résultat sera-t-il le même que mon approche de la fenêtre de terminal? – ssdesign

+1

vérifier cela trop .... intresting http://www.php.net/manual/fr/language.operators.execution.php –

+0

@ssdesign Oui, mais pourquoi ne pas réécrire votre programme python en PHP? Parce que compter sur exec() signifie que vous devrez configurer python partout où ce code va s'exécuter ET vous assurer que vous êtes autorisé à utiliser exec() – quantumSoup

1

si vous voulez capturer la sortie ainsi, utiliser proc_open (connectivité complète fd, soit entrée et de sortie) ou popen (soit entrée ou de sortie)

Questions connexes