2013-06-25 79 views
1

我需要運行在SH文件被調用的時候一個python腳本,並在所有的時間這一進程正在運行。Python的做,當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

它的作品真的很棒!感謝 但..它也表明正在安裝 ... 此操作後,包的所有輸出,將使用額外的磁盤空間,110 KB。 獲取: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 5min 23s![spinner animation] [1] 可以隱藏這些信息嗎? 謝謝!! [1]:http://i.stack.imgur.com/Qr6w8.gif –

+0

@Kerönas,我更新了代碼。一探究竟。 – falsetru