проблема командного модуля - PullRequest
0 голосов
/ 19 августа 2011

Привет. Я пытаюсь выполнить команду bash в python, импортировав модуль команд. Думаю, здесь я задавал тот же вопрос. Однако на этот раз это не работает. Сценарий выглядит так:

#! / USR / бен / питон

import os,sys
import commands
import glob

path= '/home/xxx/nearline/bamfiles'
bamfiles = glob.glob(path + '/*.bam')

for bamfile in bamfiles:
    fullpath = os.path.join(path,bamfile)
    txtfile = commands.getoutput('/share/bin/samtools/samtools ' + 'view '+ fullpath)
    line=txtfile.readlines()
    print line

это представление samtools создаст (я думаю) .txt файл

Я получил ошибки:

Traceback (most recent call last):
  File "./try.py", line 12, in ?
    txtfile = commands.getoutput('/share/bin/samtools/samtools ' + 'view '+ fullpath)
  File "/usr/lib64/python2.4/commands.py", line 44, in getoutput
    return getstatusoutput(cmd)[1]
  File "/usr/lib64/python2.4/commands.py", line 54, in getstatusoutput
    text = pipe.read()
SystemError: Objects/stringobject.c:3518: bad argument to internal function

Кажется, проблема в командах .getoutput

Спасибо

Ответы [ 2 ]

2 голосов
/ 19 августа 2011

Я бы рекомендовал использовать подпроцесс

Из документации по командам:

Устаревший с версии 2.6: Модуль команд был удален в Python 3.0.Вместо этого используйте модуль подпроцесса.

Обновление: только что понял, что вы используете Python 2.4.Простой способ выполнить команду - это os.system ()

1 голос
/ 19 августа 2011

Быстрый поиск в Google по запросу "SystemError: Objects / stringobject.c: 3518: неверный аргумент для внутренней функции" вызывает несколько сообщений об ошибках. Например, https://www.mercurial -scm.org / bts / issue1225 и http://www.modpython.org/pipermail/mod_python/2007-June/023852.html. Кажется, это проблема с Fedora в сочетании с Python 2.4, но я не совсем уверен в этом Я бы посоветовал вам следовать совету Майкла и использовать os.system или os.popen для выполнения этой задачи. Для этого изменения в вашем коде будут:

import os,sys
import glob

path= '/home/xxx/nearline/bamfiles'
bamfiles = glob.glob(path + '/*.bam')

for bamfile in bamfiles:
    fullpath = os.path.join(path,bamfile)
    txtfile = os.popen('/share/bin/samtools/samtools ' + 'view '+ fullpath)
    line=txtfile.readlines()
    print line
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...