2009-06-23 4 views
3

Так что у меня этот сценарий оболочки:Вызов внешней программы из питона

echo "Enter text to be classified, hit return to run classification." 
read text 

if [ `echo "$text" | sed -r 's/ +/ /g' | bin/stupidfilter data/c_rbf` = "1.000000" ] 
then 
    echo "Text is not likely to be stupid." 
fi 

if [ `echo "$text" | sed -r 's/ +/ /g' | bin/stupidfilter data/c_rbf` = "0.000000" ] 
then 
    echo "Text is likely to be stupid." 
fi 

Я хотел бы, чтобы записать его в питона. Как мне это сделать?

(Как вы можете видеть, он использует библиотеку http://stupidfilter.org/stupidfilter-0.2-1.tar.gz)

+0

Я изменил название так что люди ищут это найдет отличный ответ noskio в –

+0

как сценарий оболочки, можно оптимизировать за счет экономии на выходе из команды в backticks в переменную, а затем сравнивая переменную в двух операторах if, вместо того, чтобы дважды запускать код. –

ответ

8

Чтобы сделать это так же, как сценарий оболочки делает:

import subprocess 

text = raw_input("Enter text to be classified: ") 
p1 = subprocess.Popen('bin/stupidfilter', 'data/c_trbf') 
stupid = float(p1.communicate(text)[0]) 

if stupid: 
    print "Text is likely to be stupid" 
else: 
    print "Text is not likely to be stupid" 
1

Вы могли ясно выполнение команд, как суб-оболочки и прочитать возвращаемое значение, так же, как в сценарии оболочки, а затем обработать результат в Python.

Это проще, чем загрузка функций C.

Если вы действительно хотите загрузить функцию из библиотеки stupidfilter, сначала посмотрите, не сделал ли кто-то еще ее. Если вы не можете найти никого, у кого есть, тогда прочитайте manual - как туда позвонить из Python на C.

По-прежнему проще использовать то, что уже сделали другие.

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