您好我正在尝试通过导入命令模块在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
的问题由于
答案 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/issue1225和http://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