我已成功启动了一个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之间的系统都以不同的方式处理命令/变量,我希望有人可以帮助我....