2014-12-12 3 views
0

Я использую выполнение python script в php, но при этом отображается ошибка ValueError: invalid literal for int() with base 10: 'param2', в то время как он отлично работает с терминалом.скрипт python, показывающий ошибку при выполнении php

вот мой код:

$String = "Hello there, how are you."; 
$no_of_chars_per_word = "3"; 
$special_word = "is"; 
$stop_list = "is are"; 

$param1 = $String; 
$param2 = $no_of_chars_per_word; 
$param3 = $special_word; 
$param4 = $stop_list; 

$command = "/usr/bin/python2.7 /home/anupam/public_html/Text_Analysis_Python/Total_word_count.py"; 
$command .= " param1 param2 param3 param4 2>&1"; 

header('Content-Type: text/html; charset=utf-8'); 
echo '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />'; 
echo "<style type='text/css'> 
body{ 
background:#000; 
color: #7FFF00; 
font-family:'Lucida Console',sans-serif !important; 
font-size: 12px; 
} 
</style>"; 

$pid = popen($command,"r"); 

echo "<body><pre>"; 
while(!feof($pid)) 
{ 
echo fread($pid, 256); 
flush(); 
ob_flush(); 
echo "<script>window.scrollTo(0,99999);</script>"; 
usleep(100000); 
} 
pclose($pid); 

echo "</pre><script>window.scrollTo(0,99999);</script>"; 
echo "<br /><br />Script finalizado<br /><br />"; 
?> 

но он показывает ошибку:

Traceback (most recent call last): 
    File "/home/anupam/public_html/Text_Analysis_Python/Total_word_count.py", line 37, in 
    main() 
    File "/home/anupam/public_html/Text_Analysis_Python/Total_word_count.py", line 17, in main 
    min_char_per_word   = int(minimum_characters_per_word) 
ValueError: invalid literal for int() with base 10: 'param2' 


Script finalizado 

wheareas он работает нормально на моем терминале:

[email protected]:~/public_html/Text_Analysis_Python$ python Total_word_count.py "hello there, how are you." "4" the "so the are" 
3 

вот мой питон код:

import sys 

def main(): 
    """Accessing the command line arguments as per constraint""" 
    test_data     = sys.argv[1]  #string to be analysed 
    minimum_characters_per_word = sys.argv[2]  #minimum characters per word to be analysed 
    special_word    = sys.argv[3]  #special word to be analysed 
    stop_list_string   = sys.argv[4]  #stop list to be ignored in the anaysis 

    """Conversion of minimum characters per word to integer type""" 
    min_char_per_word   = int(minimum_characters_per_word) 
    """conversion of stop list as a string type to a list type""" 
    stop_list = []         #stop list initially empty 
    for words in stop_list_string.split(): 
     stop_list.append(words)      #appending the stop list as per spaces between them 


    total_word_count_res   = total_word_count(test_data,min_char_per_word,special_word,stop_list) 
    print total_word_count_res 

def total_word_count(test_data,min_no_chars,spec_words,stop_list): 
    """Counts the total number of words in test data""" 
    word_count = 0  
    for words in test_data.split(): 
     if len(words) >= min_no_chars and words not in(stop_list) : 
      word_count += 1 

    return word_count 

if __name__ == '__main__': 
    main() 

как я могу это решить ??

+1

Я не думаю, что '$ command. =" Param1 param2 param3 param4 2> &1"; 'заменит буквальные значения" param1 "на" param4 "со значениями, которые фактически содержат эти переменные. – Kevin

+0

Thanx @Kevin, тогда как могу ли я прочитать несколько аргументов командной строки? – Anupam02

+0

Действительно, вам нужно добавить знак доллара ($) перед вашими параметрами. – NaeiKinDus

ответ

0

Я думаю, что

$command .= " param1 param2 param3 param4 2>&1"; 

должен быть

$command .= ' "'.$param1.'" "'.$param2.'" "'.$param3.'" "'.$param4.'" 2>&1'; 

иначе он просто дает "paramX" строки.

+0

Tnanx @Beboit Latinier, он работал нормально, вот почему мне нравится Stack Overflow. :) – Anupam02

Смежные вопросы