2016-11-23 4 views
0

Я прочитал последовательный порт и отправлю данные на python, я хочу, чтобы эта цепочка работала 10 секунд. Приведенный ниже код не работает:Время выполнения скрипта [EDIT]

sudo cat -v /dev/pts/2 | python3 bash_test.py 
pid=$! 
sleep 10 
kill -9 $pid 

[UPDATE] например bash_test.py

import sys 
for line in sys.stdin: 
    print(line,'\n') 
+0

Кошка нуждается в сигнале eof для выхода. Код блокирует команду cat в первой строке и никогда не доходит до команды sleep. – DeRauk

+0

Я вижу, но как это можно решить? – weider

ответ

1

Вы можете использовать timeout:

sudo bash -c "cat -v /dev/pts/2 | timeout 10 python3 bash_test.py" 

Командная информация:

NAME 
     timeout - run a command with a time limit 

SYNOPSIS 
     timeout [OPTION] DURATION COMMAND [ARG]... 
     timeout [OPTION] 

Простой пример для timeout:

timeout 3 sleep 10 

Команда здесь sleep 10, но timeout убьет его через 3 секунды.

+0

Он работает, отлично! – weider

+0

@weider Вы должны отметить этот ответ, так как решение, которое он предложил, решило вашу проблему! –

0

Попробуйте добавить & знак после Судо

sudo cat -v /dev/pts/2 | python3 bash_test.py & 
pid=$! 
sleep 10 
kill -9 $pid 
0

Следующий код открыть «суб -bash ", где выполняется фактическая команда. Таким образом, он может работать в фоновом режиме. Может возникнуть проблема, если вы используете потоки или многопроцессорность в скрипте python.

(sudo cat -v /dev/pts/2 | python3 bash_test.py) & 
pid=$! 
sleep 10 
kill -9 $pid 
+0

, пожалуйста, посмотрите на обновление. – weider

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