命令模块问题

时间:2011-08-18 21:40:34

标签: python command

您好我正在尝试通过导入命令模块在python中执行bash命令。我想我之前问过同样的问题。但是这次它不起作用。 脚本如下:

#!的/ usr / bin中/ Python的

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

似乎是command.getoutput

的问题

由于

2 个答案:

答案 0 :(得分:2)

我建议使用subprocess

从命令文档:

  

自2.6版以来不推荐使用:在Python 3.0中删除了命令模块。请改用子进程模块。

更新:刚刚意识到你正在使用Python 2.4。执行命令的简单方法是os.system()

答案 1 :(得分:1)

快速谷歌搜索“SystemError:Objects / stringobject.c:3518:内部函数的错误参数”会显示几个错误报告。例如https://www.mercurial-scm.org/bts/issue1225http://www.modpython.org/pipermail/mod_python/2007-June/023852.html。 Fedora与Python 2.4结合使用似乎是一个问题,但我对此并不十分肯定。我建议您遵循Michael的建议并使用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