从python

时间:2015-09-14 17:47:01

标签: python multithreading bash shell

假设我在脚本运行时迭代地使用Python调用不同的bash命令。我如何进行线程化(或睡眠)以使我的Python脚本不会停止并停止? 我尝试使用:

threading.Timer(5.0, self.func).start()

但也许是因为我的shell命令很复杂,Python脚本/应用程序停滞不前。

示例:

def func(self, command):
    cmd = subprocess.Popen(command, stdout=subprocess.PIPE, shell=True)
    output, eff = cmd.communicate()
    return output

def __init__(self, parent=None):
    threading.Timer(5.0, self.func).start()
    command = "ifconfig"
    print self.func(command)

P.S。但我不打电话给“ifconfig”这只是一个例子

2 个答案:

答案 0 :(得分:0)

您正在拨打func两次。在最后一行,你在你所站的同一个线程上调用它。这将在func返回之前阻止。

答案 1 :(得分:0)

创建计时器时,不要将command作为参数发送到您的函数。我根据您的代码制作了一个工作示例,以下是如何运行带参数的计时器。正如@ felipe-lema所说,你正在调用函数两次,但我没有在代码中更改它,尽管我不明白原因。

  

threading.Timer(interval,function,args = [],kwargs = {})

#!/usr/bin/python2.7
import sys
import threading
import subprocess

class TestClass(object):

    def __init__(self, parent=None):
        command = "ifconfig"
        threading.Timer(5.0, self.func, (command,),).start()
        print self.func(command)

    def func(self, command):
        cmd = subprocess.Popen(command, stdout=subprocess.PIPE, shell=True)
        output, eff = cmd.communicate()
        sys.stdout.write("In Thread "+threading.current_thread().name+"\n")
        sys.stdout.write(output)
        return output

TestClass()