2013-07-25 4 views
1

파이썬에서 작은 스크립트를 만들었는데, 다중 처리를 사용하여 동시에 두 개의 함수를 실행하려고합니다. 첫 번째 함수는 디렉토리 재귀 검색을 수행하고 두 번째 함수는 사용자에게 몇 가지 질문을 표시합니다. .txt 파일이 만들어졌지만 질문이 나타나지 않습니다. 이 질문을 보았습니다 : Python command line input in a process 초보자로서 저는 문제가 무엇인지 어떻게 해결할 수 있는지 이해하지 못했습니다. 여기 내 스크립트입니다 :파이썬 프로세스 내 Raw_input

import os 
import thread 
import time 
from multiprocessing import Process 

def writeFiles(): 
    #open a file for writing files in it 
    f = open("testFile.txt","w") 
    #do the walk 
    for root ,dirs,files in os.walk('C:\\Users'): 
     for dir in dirs:   
      if dir.startswith('Test'): 
       for root ,dirs,files in os.walk('C:\\Users\\' + dir +'\Desktop'): 
        for file in files: 
         if file.endswith('.txt'):       
          #include the full path 
          f.write(os.path.join(root, file + "\n")) 

    #close the file 
    f.close() 

def ask(): 
    a = raw_input('Your name? ') 
    if a == 'Tester': 
     print 'Hello' 
    else: 
     print 'Bye' 


if __name__ == '__main__': 

# create processes 
p1 = Process(target = writeFiles) 
p2 = Process(target = ask) 
p1.start() 
p2.start() 

답변

0

가장 간단한 것은 주 과정 자체에서 ask를 호출하는 것입니다 :

import threading 
import multiprocessing as mp 
import sys 

def ask(stdin): 
    print 'Your name? ', 
    a = stdin.readline().strip() 
    if a == 'Tester': 
     print 'Hello' 
    else: 
     print 'Bye' 
    stdin.close() 

def writeFiles(): 
    pass 

if __name__ == '__main__': 
    p1 = mp.Process(target=writeFiles) 
    p1.start() 
    t1 = threading.Thread(target=ask, args=(sys.stdin,)) 
    t1.start() 
    p1.join() 
    t1.join() 

: 당신이 스레드를 사용할 수

if __name__ == '__main__': 
    p1 = Process(target = writeFiles) 
    p1.start() 
    ask() 

또는

또는 os.dupas J.F. Sebastian shows here :

을 사용할 수 있습니다.
import multiprocessing as mp 
import sys 
import os 

def ask(stdin): 
    print 'Your name? ', 
    a = stdin.readline().strip() 
    if a == 'Tester': 
     print 'Hello' 
    else: 
     print 'Bye' 
    stdin.close() 

def writeFiles(): 
    pass 

newstdin = os.fdopen(os.dup(sys.stdin.fileno())) 

if __name__ == '__main__': 
    p1 = mp.Process(target=writeFiles) 
    p1.start() 
    p2 = mp.Process(target=ask, args=(newstdin,)) 
    p2.start() 
    p1.join() 
    p2.join()