linux vs mac pathname不同地工作...关闭文件的I / O操作

时间:2016-02-27 12:03:42

标签: python linux django subprocess pipeline

我已成功启动了一个unix命令samtools view -h [path_to_file_of_interest],在我的mac计算机上使用了一个subpocess命令(Popen) - 这是为了开发一个管道进程。这是在从views.py文件调用的django环境中完成的。

    pipe
      -myproject
         -myapp
            -views.py

然后,我必须在Linux计算机上重新开发该项目,该计算机具有最终将用于发布django站点的服务器。所以我通过电子邮件将zip文件发送给自己,并在linux机器上下载了管道目录。

问题:命令链工作正常,直到子进程调用samtools view -h [path_to_file_of_interest]

当我使用相对路径命令时,我认为路径不会出现问题:

1         for file in os.listdir(settings.MEDIA_ROOT):
2             if file.endswith(".bam"):
3               bamfile = file
4
5               path = os.path.join(settings.MEDIA_ROOT, bamfile) #path not working
6               print "testing",path #DEBUG
7               print "step-1" #DEBUG
8               print "step-2" #DEBUG
9               os.system("module load samtools/1.3") 
10              print "step-3" #DEBUG
11              print "step-4 - creating reads.sam" #DEBUG
12              with open("reads.sam", "w") as output:
13                  print 'start' #DEBUG
14                  a = subprocess.Popen(["samtools", "view", "-h", path], stdout=out)
16                  print 'middle'#DEBUG
17                  a.communicate()[0]       

如上所述,这个过程在mac上工作正常但在linux环境中运行站点时,管道在子进程阶段失败,返回错误:

I/O operation on closed file

在行上评论为" DEBUG"我只是测试过程失败的地方(始终在第14行)。

在第9行,我为下载的samtools加载模块(虽然我不必在mac上执行此操作)。

在第14行,我还尝试在os.systems的位置使用Popen(并使用感兴趣的文件的绝对路径)但返回错误:

'file' object is not callable

不确定此错误是否源于变量' file'在第1行的for循环中设置,或者它只是另一个路径问题。

使用Popen的绝对路径返回相同的错误 - " I / O ...."如上所述。

无论哪种方式,mac和linux之间的系统都以不同的方式处理命令/变量,我希望有人可以帮助我....

0 个答案:

没有答案