Python linux与mac路径名的工作方式不同。。。关闭文件上的I/O操作
我已在mac电脑上使用子进程命令(Popen)成功启动了unix命令Python linux与mac路径名的工作方式不同。。。关闭文件上的I/O操作,python,linux,django,subprocess,pipeline,Python,Linux,Django,Subprocess,Pipeline,我已在mac电脑上使用子进程命令(Popen)成功启动了unix命令samtools view-h[路径到感兴趣的文件]——这是为了开发管道进程。这是在从views.py文件调用的django环境中完成的 树 然后,我不得不在一台linux计算机上重新开发该项目,该计算机拥有最终用于发布django站点的服务器。因此,我通过电子邮件向自己发送了zip文件,并在linux机器上下载了管道目录 问题:在子进程调用samtools view-h[感兴趣的文件路径]之前,命令链工作正常 由于我使用的是相
samtools view-h[路径到感兴趣的文件]
——这是为了开发管道进程。这是在从views.py文件调用的django环境中完成的
树
然后,我不得不在一台linux计算机上重新开发该项目,该计算机拥有最终用于发布django站点的服务器。因此,我通过电子邮件向自己发送了zip文件,并在linux机器上下载了管道目录
问题:在子进程调用samtools view-h[感兴趣的文件路径]
之前,命令链工作正常
由于我使用的是相对路径命令,我假设路径不会出现问题:
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
'file' object is not callable
在注释为“DEBUG”的行中,我只是测试流程失败的地方(始终在第14行)
在第9行,我为下载的samtools
加载模块(尽管我不必在mac上这样做)
在第14行,我还尝试使用os.systems
代替Popen
(并使用感兴趣文件的绝对路径),但返回错误:
I/O operation on closed file
'file' object is not callable
不确定此错误是否源于第1行的for循环中设置的变量“file”,或者它只是另一个路径问题
将绝对路径与Popen
一起使用会返回相同的错误-“I/O…”
mac和linux之间的系统以不同的方式处理命令/变量,我希望有人能帮助我……您是否尝试过使用
os.path.abspath
?是的,尝试过,但它返回:“'builtin\u function\u或\u method'对象没有属性'abspath'”,即使我导入了'sys'和'os'。。。当我将“stdout=out.PIPE”作为标准输出时,即使我导入了“subprocess”,也会遇到类似的错误。当我尝试“从子进程/sys/os导入…”时,它给出了不导入子进程/sys/os的错误…您是否尝试过使用os.path.abspath
?是的,尝试过,但它返回:“内置函数或方法”对象没有属性“abspath”,即使我导入了“sys”和“os”。。。当我将“stdout=out.PIPE”作为标准输出时,即使我导入了“subprocess”,也会遇到类似的错误。当我尝试“从子进程/sys/os导入…”时,它给出了不导入子进程/sys/os….的错误。。。。