2014-02-20 3 views
1

Я использую python для запуска терминальных программных вызовов bedtools. Bedtools принимает имена файлов в качестве аргументов. Однако, поскольку я могу открыть только 256 файлов сразу, я ограничен в своей способности многопоточности. Я надеялся, что сможет отправить файл в память на терминал, но у него нет имени, например, SpooledTemporaryFile(). Есть ли способ обойти это?ссылочный файловый объект в памяти

пример:

f=tempfile.NamedTemporaryFile(delete=True) 
region=tempfile.SpooledTemporaryFile() 
region.write(b'chr1\t1090917\t1136917\n') 
region.seek(0) 
subprocess.call(['/usr/local/bin/shuffleBed', '-incl',str(region),'-i','temp'+chromosome+'ShuffleMutations.bed','-g','hg19.genome'],stdout=f) 

находится там далеко, чтобы дать региону имя, терминал может найти его?

+0

Посмотрите на использование 'StringIO' –

+0

@SlaterTyranus: Противоположная проблема. –

+0

Вы посмотрели на использование трубы? – cmd

ответ

0

Используйте NamedTemporaryFile для создания входного файла. Если вы закроете его, не должно быть утечки дескрипторов файлов.

f=tempfile.NamedTemporaryFile(delete=True) 
region=tempfile.NamedTemporaryFile(delete=False) 
region.write(b'chr1\t1090917\t1136917\n') 
region.close() 
subprocess.call(['/usr/local/bin/shuffleBed', '-incl',region.name,'-i','temp'+chromosome+'ShuffleMutations.bed','-g','hg19.genome'],stdout=f) 
Смежные вопросы