2013-06-25 34 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