О вставке команд оболочки в python

1

Я ввел некоторые команды оболочки в скрипт python, как показано ниже:

#!/usr/bin/python

import os,sys,re
import gzip
import commands

path = "/home/x/nearline"

for file in os.listdir(path):
  if re.match('.*\.recal.fastq.gz', file):
    fullpath = os.path.join(path, file)
    result = commands.getoutput('zcat fullpath |wc -l')
    numseqs = int(result)/4.0
  print numseqs

zcat fullpath |wc -l - это команда оболочки.

Проблема в том, что я определяю fullpath здесь для всех файлов fastq, но после того, как он помещен в ' ', кажется, что этот fullpath не работает. Как я могу решить эту проблему?

Теги:

3 ответа

5
Лучший ответ

Вы должны конкатенировать строку со значением переменной:

result = commands.getoutput('zcat ' + fullpath + ' |wc -l')
  • 1
    Кроме того, лучше использовать for aFile in glob.glob(path+'/*.recal.fastq.gz') а не использовать os.listdir() и os.path.join() .
  • 0
    Даже если здесь не было возможности использовать glob , обычное простое написание re.match('.*\.recal.fastq.gz', file) - это file.endswith('.recal.fastq.gz') (при условии, что вы также хотели избежать других точек в регулярном выражении).
3

fullpath - переменная, вам нужно fullpath ее с остальной командой следующим образом:

result = commands.getoutput('zcat ' + fullpath + ' |wc -l')

1

Пытаться

commands.getoutput('zcat ' + fullpath + ' |wc -l')

поскольку переменные python не разворачиваются автоматически в строках.

  • 0
    Это на самом деле не сработает ... вы пропустили пробелы вокруг fullpath
  • 0
    Правда. Исправлено, хотя мне лучше удалить этот ответ, когда есть 3 одинаковых.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню