как вызвать скрипты python из php

Мне нужно передать значение из PHP в скрипт Python, который затем записывает значение в файл csv. Но у меня возникают трудности, мой питон при вызове пишет пустой файл csv. В чем может быть проблема.

<?php if (isset($_POST['data'])){ $data = $_POST['data']; $result = exec("python processData.py .$data"); echo $result; } ?> 

и processData.py

 import nltk from nltk.corpus import stopwords from nltk import stem import re import sys import csv mysentence = sys.argv[1] f = open("output.csv", "wb") tokens = nltk.word_tokenize(mysentence) d = [i.lower() for i in tokens if (not tokens in stopwords.words('english'))] porter = nltk.PorterStemmer() for t in tokens: result = porter.stem(t) f.write(result+"\n") print result f.close() 

Related of "как вызвать скрипты python из php"

 $result = exec("python processData.py .$data"); 

вероятно, проблема, если вы набрали: $data = "hello little world"; он будет проходить как

  $result = exec("python processData.py .hello little world"); 

sys.argv будет

  ["processData.py",".hello","little","world"] 

к сожалению, я не уверен, как nltk справится с этим, но, конечно, не так, как вы намереваетесь

как в сторону

 d = [i.lower() for i in tokens if (not tokens in stopwords.words('english'))] 

должен быть перезаписан

 if tokens not in stopwords.words('english'): d = [i.lower() for i in tokens] else: #if your actually planning on using d anywhere ... currently your just throwing it out # not using d makes all of this just as effective as a pass statement d = [] 

Может быть . перед $ data попробуйте следующее:

 $result = exec("python processData.py {$data}"); 

С уважением!

Нет проблемы с exec() или что-то еще. Проблема в том, что модуль nltk не может найти каталог nltk_data . Для этого просто найдите где nltk_data присутствует в вашей системе: обычно ~/nltk_data . Теперь импортируйте этот путь при запуске функции.

 import nltk; 

Теперь nltk.data.path – это список мест для поиска модулей. Вы можете просто сделать:

 nltk.data.path.append("your location/directory");