如果我通过命令行运行一些Python,比如说像这样:
cat <<'PYSTUFF' | python
print "Hi"
print "There"
print "Friend"
PYSTUFF
这很好用并输出REPL的响应。我想要做的是限制此命令的执行。例如,如果我写道:
cat <<'PYSTUFF' | python
while(True):
print "Oh no!"
PYSTUFF
那将是不好的,最终会崩溃。我如何限制执行,说“如果这需要超过x的时间,杀死它。”?我尝试使用ulimit -t 2
,但这似乎没有达到我想要的效果。
答案 0 :(得分:1)
感谢@Biffen使用timeout
命令完美运行。在Mac上,我使用了gtimeout
。我的整个命令看起来像这样:
cat <<'PYSTUFF' | gtimeout 0.5 python
while(True): print("hi")
PYSTUFF
答案 1 :(得分: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
答案 2 :(得分:0)
如果你想从shell控制它,将python脚本启动到后台,睡一会儿,然后杀掉后台进程:
# 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 $!