Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python linux与mac路径名的工作方式不同。。。关闭文件上的I/O操作_Python_Linux_Django_Subprocess_Pipeline - Fatal编程技术网

Python linux与mac路径名的工作方式不同。。。关闭文件上的I/O操作

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[感兴趣的文件路径]之前,命令链工作正常 由于我使用的是相

我已在mac电脑上使用子进程命令(Popen)成功启动了unix命令
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….的错误。。。。