2014-12-08 5 views
2

Если бы я был запустить некоторые Python через командную строку сказать, например, что-то вроде этого:команда Run с ограниченным временем выполнения

cat <<'PYSTUFF' | python 
print "Hi" 
print "There" 
print "Friend" 
PYSTUFF 

Это прекрасно работает и выводит отклик РЕПЛ. Я хочу ограничить выполнение этой команды. Например, если я написал:

cat <<'PYSTUFF' | python 
while(True): 
    print "Oh no!" 
PYSTUFF 

Это было бы неплохо и в конечном итоге что-то сработало. Как ограничить выполнение, чтобы сказать «если это занимает больше, чем х времени, убить его»? Я попытался использовать ulimit -t 2, но это, похоже, не достигает того, что я хочу.

+4

['man timeout'] (http://linux.die.net/man/1/timeout) – Biffen

ответ

0

ограничить выполнение этой команды.

Начиная с Python 2.6+ можно использовать multiprocessing модуль:

cat <<'PYSTUFF' | python 
from multiprocessing import Process 
from time import sleep 

def task(): 
    while True: 
     print "oh no!" 
     sleep(0.5) 

p = Process(target=task) 
p.start() 
p.join(1) 
print "*** Aborted" 
p.terminate() 
PYSTUFF 
0

Если вы хотите, чтобы контролировать это из оболочки, запустите сценарий питона на задний план, сон на некоторое время, а затем убить фоновый процесс:

# a sample command that generates some output 
{ while :; do date; sleep 1; done; } & 

# let it run for a while, see if it's still running, and kill it if it is 
sleep 10 && kill -0 $! 2>/dev/null && kill $! 
1

Благодаря @Biffen Использование команды timeout работала отлично. На mac я использовал gtimeout. Вся моя команда выглядит так:

cat <<'PYSTUFF' | gtimeout 0.5 python 
while(True): print("hi") 
PYSTUFF 
Смежные вопросы