2014-03-27 229 views
1

我试图用if语句启动一个进程for item in list。 if语句(如果满足条件)将调用传递2个参数的函数。该函数然后遍历另一个列表,为列表中的每个列表运行子进程调用。现在出于某种原因,我没有从子流程中获取任何输出。如果我在命令行中运行相同的命令,它可以正常工作,并且在我开始执行多处理器之前,它工作正常。任何人都可以解释发生了什么?在循环问题中的多处理

这是函数如何被调用。

userlist = (name1, name2, name3) 
if condition == True: 
    for user in userlist: 
     p = multiprocessing.Process(target=tllocaltF, args=(serverlist, user)) 
     jobs.append(p) 
     p.start() 

这是它被调用函数:

def tllocaltF(domain, user): 
#function iterates list of target users locally 
    print (domain,user) #this prints out the username and domain as expected 
    print "Targeted Users Found On LocalHost\n" 
    try: 
     out = subprocess.check_output(["tasklist", "/V", "/FO", "List", "/FI", "USERNAME eq {0}\\{1}" .format(domain, user)], stderr=subprocess.STDOUT) 
     users = [item for item in out.split() if domain in item and user in item] 
     sortedl = set(users) 
     print sortedl #this is printing set([]) 
     for item in sortedl: 
      print item 
    except CalledProcessError as e: 
     errormessage = e.output 
     print errormessage 

    print "\nCompleted"  
+0

如果我'打印出'我收到以下信息:信息:没有任何任务符合指定的标准正在运行。那么多进程实例对命令做了什么? – iNoob

+0

你如何运行这段代码?即在什么环境下?在某些环境下,与子进程中的打印有关的各种错误/问题。 – roippi

+0

我在Windows 7上运行代码 – iNoob

回答

1

,你不会看到从通过multiprocessing.Subprocess()调用函数的任何输出,因为该功能启动一个完全独立的过程,有它自己的标准输入和标准输出,它们没有连接到父进程的命令提示符/终端。您有几个选项:

1)将您的打印语句更改为tllocaltF()以写入临时文件而不是打印。这不是一个