2016-06-10 2 views
0

Я написал сценарий, и когда я запускаю его в раковине, он печатает значения, выход правильно (Судо питон /home/pi/map/apps/assistant/IFTTT.py):выполнения питон скрипт не выход

def GetCalenderMessages(): 
    print("test") 
    CalenderMessage = bus_service.receive_queue_message('calendar', peek_lock=True) 
    if CalenderMessage != None: 
     message = str(CalenderMessage.body) 
     queuemessage = message.split('|')[1] 
     print(queuemessage) 

     sys.stdout.write(queuemessage) 
     saytts(queuemessage) 
     CalenderMessage.delete() 

У меня есть интерфейс с переключателем On, и когда я нажимаю On, этот сценарий должен быть выполнен, но это не работает, но я не получаю вывод на печать, указанный выше.

@app_bp.route("/on", methods=["POST"]) 
@opsoroapp.app_api 
def on(): 
    print('test') 
    cmd = "sudo python /home/pi/OnoSW/apps/assistant/IFTTT.py" 
    p = subprocess.Popen(cmd, shell=True, stdout=PIPE, stderr=STDOUT) 
    for line in iter(p.stdout.readline,''): 
     print line 

Я пробовал разные вещи подпроцесса, как subprocess.check_output и т.д., но это не дает распечатанные значения обратно.

Спасибо

+0

Почему вы делаете это через Popen? Почему вы не можете просто импортировать скрипт и вызвать функцию? –

+0

ваша функция должна возвращать значение вместо этого с помощью 'print()', 'sys.stdout.write()' и т. Д., И, как @DanielRoseman сказал: импортируйте модуль и вызовите функцию вместо запуска в качестве отдельного процесса. 1- Вы видите результат 'print ('test')'? 2- Вы видите результат 'print >> sys.stderr," stderr "'? 3- Вам нужно указать пароль для запуска 'sudo python'? Зачем вам «судо» здесь? – jfs

ответ

0

1) Вместо того, чтобы с помощью труб и Popen, просто импортировать сценарий и вызвать GetCalenderMessages

2) Вы хотите, это просто выводится на консоль или выводится пользователю WebAPP?

В случае второго сценария является случай:

в вашей route функции, вы, кажется, не return ничего. Помните, как работают колбочки, то, что вы возвращаете (при успехе), выводится пользователю (в виде веб-страницы), поэтому вам нужно сохранить результат, а затем вернуть его как строку или добавить в шаблон HTML и render этот шаблон вместо.

See more

в случае, если вы хотите его напечатанным на консоль, пытаясь 1) может исправить вашу проблему

+0

вариант 1 не является вариантом. В варианте 2 на этот раз я вернул выход, но он ничего не делает. Я покажу свою проблему: когда я запустил в оболочке эту команду «sudo python IFTTT.py, не получилось: http://i.imgur.com/iqiNZRT.png, когда я запустил ее в фляжке webserver, не получилось: http : //i.imgur.com/HZzyXpI.png, не смотрите на первую ошибку, потому что я использую Python 2.7 – Mat

+0

Почему вы используете sudo - это очень редко, что для любого приложения нужны корневые привилегии. –

+1

, когда вы выполняете 'sudo' в терминале, Unix/Linux предложит ввести пароль. Когда вы выполняете «sudo» через pOpen - он все равно ожидает пароль - и не будет работать, пока вы не укажете этот пароль. Заданные вопросы действительны - почему вы используете 'sudo' и почему вы создаете отдельный процесс? Вы утверждаете, что вам нужно ... но если мы не поймем, почему вам будет сложно помочь. –

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