'Bash'

2016-04-03 36 views
0

'da segmentasyon hatası üzerinde kilitlenen Dişli Popen, komut satırı araçlarını çalıştırmak için Popen bash'ı işledim. bash, bir segfault oluşturur veya yürütme komutunu iptal eder.'Bash'

def FunctionToThread(args): 

    su2 = Popen('bash', shell = True, stdin = PIPE, stdout=fp, env = os.environ) 
    for i in commands: 
     su2.stdin.write(i) 
    su2.stdin.close() 
    su2.wait() 
    fp.close() 

fonksiyonu FunctionToThread diş modülü kullanılarak kullanarak geçirilir. Yukarıda belirtildiği gibi, iplik bash'ta bir segfault ile karşılaşıldığında sona erer.

Bu segfault'u bir try/except kontrol türünde yakalamak ve en önemlisi iş parçamın sonlanmasını engellemek istiyorum.

Bunu nasıl başarabilirim?

"""SNIPPET""" 
from multiprocessing import cpu_count 
import threading 
from subprocess import Popen, PIPE 
import os 

start =0 
numcores = cpu_count() 
global RESULTS, LOCK 
LOCK = threading.Lock() 
RESULTS = [] 

def ParallelRun(commands, RESULTS, LOCK): 

    for i in range(0, 100): 
     LOCK.acquire() 
     RESULTS.append('ParallelRUn') 
     LOCK.release() 

    su2 = Popen('bash', shell = True, stdin = PIPE, stdout=PIPE, env = os.environ) 
    for i in commands: 
     su2.stdin.write(i) 
    su2.stdin.close() 
    err =su2.wait() 


for i in range(0, numcores): 
    commands = ['Enter commands which cause Segmentation Faults'] 
    t = threading.Thread(target=ParallelRun, args=(commands, RESULTS, LOCK)) 
    threads.append(t) 

for t in threads: 
    t.start() 

for t in threads: 
    t.join() 


print len(RESULTS), RESULTS 

liste çalışma sırasında parçalama arızası meydana komutları girin komutlar, sorunumu çoğaltırlar.

Teşekkürler!

+0

Kopyala + yapıştır ile yürütebileceğim küçük bir yeniden üretilebilir snippet oluşturabilir misiniz? – guettli

+0

@guettli: Bir snippet ekledim. Komutlar listesinde, Segmentasyon hataları oluşturan bir dizi komut eklenebilir. – pds

+0

pds, 'stdout' olarak kullanılan son kod parçasında 'fp' değişkenine sahiptiniz ve şimdi 'PIPE' kullanıyorsunuz. Bu değişikliğe neden olan şey nedir? – tijko

cevap

1

Bu sorun çözüldü. Ben iş parçacığı sonlandıran programın/else blokları bir beyanı vardı çıktı çıkıyor.