我正在尝试将一系列python脚本从hpc集群移动到亚马逊云。我有一个需要从脚本中调用的可执行文件。我总是使用os.system来做这件事,但是当它在云中运行时它不起作用,我认为它可能已被弃用。无论如何,它似乎不是处理这个的首选方式,所以我切换到subprocess.call。如果我在shell提示符下键入它,我给出的命令行可以工作:
$needle -outfile=../test.txt_results/Output/Needlescores/OG5_126737_Am_ac_Acasneedle.txt -asequence=../test.txt_results/Temp/Am_ac_Acasseq1.fasta -bsequence=../test.txt_results/Temp/Am_ac_Acasseq2.fasta -gapopen=10 -gapextend=0.5
如果我打开python解释器并使用subprocess.call:
,它就可以工作>>> call('needle -outfile=../test.txt_results/Output/Needlescores/OG5_126737_Am_ac_Acasneedle.txt -asequence=../test.txt_results/Temp/Am_ac_Acasseq1.fasta -bsequence=../test.txt_results/Temp/Am_ac_Acasseq2.fasta -gapopen=10 -gapextend=0.5',shell = True)
但是,如果我从我的脚本中运行它,我会收到错误:
OSError: [Errno 12] Cannot allocate memory
我进入脚本并将调用更改为调用('ls',shell = True)并且它仍然给了我相同的错误,因此我认为它与使用太多内存的可执行文件无关。
File "/home/ubuntu/Scripts/Taxon/__init__.py", line 541, in runneedle
child = subprocess.call('ls', shell = True)
File "/usr/lib/python2.7/subprocess.py", line 493, in call
return Popen(*popenargs, **kwargs).wait()
File "/usr/lib/python2.7/subprocess.py", line 679, in __init__
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1143, in _execute_child
self.pid = os.fork()
OSError: [Errno 12] Cannot allocate memory
我四处寻找有类似错误的人,并且有一个非常技术性的(对于我没有经验的眼睛)关于叉子的答案 - 但它似乎不足以帮助我,我不知道我会怎么做处理这样的事情,特别是在EC2实例中。
有没有人遇到过这个问题 - 并且找到了解决方案 - 或者是否有人为在Linux和云端工作的新手提供建议?