Python 命令模块问题

Python 命令模块问题,python,command,Python,Command,大家好,我正试图通过导入commands模块在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.

大家好,我正试图通过导入commands模块在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
似乎是commands.getoutput的问题

谢谢

我建议使用

从命令文档中:

自版本2.6以来已弃用:命令模块已在Python 3.0中删除。改用子流程模块

更新:刚刚意识到您正在使用Python2.4。执行命令的简单方法是

我建议使用

从命令文档中:

自版本2.6以来已弃用:命令模块已在Python 3.0中删除。改用子流程模块

更新:刚刚意识到您正在使用Python2.4。执行命令的一个简单方法是

在谷歌上快速搜索“SystemError:Objects/stringobject.c:3518:internal function的错误参数”会出现几个错误报告。如和。Fedora与Python2.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
在谷歌上快速搜索“SystemError:Objects/stringobject.c:3518:internal function的错误参数”会出现几个错误报告。如和。Fedora与Python2.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

我同意他应该使用subprocess,但我不知道它是否一定能解决问题。命令可以导入,这意味着他可能正在使用支持命令的python版本。所以它应该还能用。是的,我注意到2.4版本有点晚了。更新帖子应该会有帮助。os.system()不允许他获得所需的输出。os.popen()将是更好的选择。他可以将输出重定向到一个文件。会更容易,对,那也行。他只是想清楚地表明,他不能只是在getoutput所在的系统中插入并期望它工作。:)我同意他应该使用subprocess,但我不知道它是否一定能解决问题。命令可以导入,这意味着他可能正在使用支持命令的python版本。所以它应该还能用。是的,我注意到2.4版本有点晚了。更新帖子应该会有帮助。os.system()不允许他获得所需的输出。os.popen()将是更好的选择。他可以将输出重定向到一个文件。会更容易,对,那也行。他只是想清楚地表明,他不能只是在getoutput所在的系统中插入并期望它工作。:)这不会解决您现在遇到的问题,但将来会遇到的问题是commands.getoutput()返回一个字符串,您正在对其调用readlines()。这将失败,因为readlines()是针对文件对象的操作。这不会解决您遇到的问题,但将来会遇到的问题是命令。getoutput()返回一个字符串,您正在对其调用readlines()。这将失败,因为readlines()是针对文件对象的操作。