'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!
Kopyala + yapıştır ile yürütebileceğim küçük bir yeniden üretilebilir snippet oluşturabilir misiniz? – guettli
@guettli: Bir snippet ekledim. Komutlar listesinde, Segmentasyon hataları oluşturan bir dizi komut eklenebilir. – pds
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