2013-06-25 2 views
1

sh 파일을 호출 할 때와이 프로세스가 실행되는 동안 python 스크립트를 실행해야합니다.Python Do While sh 함수

기본적으로 설치

import sys 
import time 

do 
    def spinn(): 
    print "processing...\\", 
    syms = ['\\', '|', '/', '-'] 
    bs = '\b' 
    for _ in range(10): 
     for sym in syms: 
      sys.stdout.write("\b%s" % sym) 
      sys.stdout.flush() 
      time.sleep(.1) 
    spinn() 
while 
    def installing(): 
    import subprocess 
    subprocess.call(["sudo sh", "installer.sh"],shell=True) 
    installing() 

동안 파이썬 회 파이썬에서이에하는 방법은 무엇입니까?

답변

1

subprocess.call() 하위 프로세스가 종료 될 때까지 대기합니다. 대신 subprocess.Popen을 사용하십시오. 그런 다음 주기적으로 .poll()을 사용하여 프로세스가 종료 될 때를 확인하십시오.

import itertools 
import os 
import subprocess 
import sys 
import time 

def installing(): 
    null = open(os.devnull, 'wb') 
    p = subprocess.Popen('echo blah && sleep 5', shell=True, stdout=null) 
    #p = subprocess.Popen('sudo sh installer.sh', shell=True, stdout=null) 
    return p, null 

def spin(p_stdout): 
    p, stdout = p_stdout 
    syms = itertools.cycle(['\\', '|', '/', '-']) 
    sys.stdout.write('processing....') 
    sys.stdout.flush() 
    while p.poll() is None: 
     sys.stdout.write('\b'+next(syms)) 
     sys.stdout.flush() 
     time.sleep(0.1) 
    p.wait() 
    stdout.close() 

spin(installing()) 
+0

@StevenRumbalski, 영어 수정을 부탁드립니다. – falsetru

+0

정말 훌륭합니다! 덕분에 하지만 설치중인 패키지의 모든 출력을 보여줍니다. ... 이 작업을 수행 한 후 110kB의 추가 디스크 공간이 사용됩니다. 가져 오기 : 1 http://mx.archive.ubuntu.com/ubuntu/ raring/main libpython2.7-stdlib amd64 2.7.4 2ubuntu3 [2,381 kB] 23 % [1 libpython2.7-stdlib 1,359 kB/2,381 kB 57 %] 13.9 kB/s 5 분 23 초! [회 전자 애니메이션] [1] 이 정보를 숨길 수 있습니까? 감사합니다. [1] : http://i.stack.imgur.com/Qr6w8.gif –

+0

@ Kerönas, 코드를 업데이트했습니다. 확인 해봐. – falsetru