我认为这是环境问题,但是我是linux新手。
我尝试在pycharm中运行subprocess.run('multiqc。') 但它告诉我找不到文件
FileNotFoundError: [Errno 2] No such file or directory: 'multiqc .'
和echo $PATH
显示anaconda路径已公开
$ echo $PATH
/media/SSD1T/Software/anaconda3/bin:
我尝试了subprocess.run('multiqc', shell = True)
,它返回错误:/bin/sh: 1: multiqc: not found
在终端中,我可以打multiqc
没问题
$which multiqc
/media/SSD1T/Software/anaconda3/bin/multiqc
尝试在pycharm中运行其他命令,没问题:
subprocess.run('ls')
In[11]: subprocess.run("ls")
loadSamples.py
venv
xFastqc.py
xTrim.py
Out[11]: CompletedProcess(args='ls', returncode=0)
唯一可行的方法是将整个路径添加到subprocess.run
In[12]: subprocess.run("/media/SSD1T/Software/anaconda3/bin/multiqc")
Usage: multiqc [OPTIONS] <analysis directory>
Error: Missing argument "analysis_dir".
This is MultiQC v1.5
For more help, run 'multiqc --help' or visit http://multiqc.info
Out[12]: CompletedProcess(args='/media/SSD1T/Software/anaconda3/bin/multiqc', returncode=2)
我的问题是:如何只用multiqc
来调用subprocess.run
,而又不把它放在整个路径上?
谢谢
答案 0 :(得分:0)
因此,我通过向/ usr / bin添加链接来绕过此问题。如果您有更好的解决方案, 请让我知道。
谢谢
答案 1 :(得分:0)
这是一个古老的问题,但是为了将来的Google员工,我可以尝试提供帮助。我认为问题在于使用subprocess
会打开一个新的shell,其中未激活具有MultiQC的conda环境。因此,multiqc
上PATH
不可用,您必须指定二进制文件的完整绝对路径。
如果我是对的,那么问题不仅仅在于MultiQC,而更多的是关于在子流程调用中使用conda的问题。此主题有several other个堆栈溢出问题。快速而肮脏的方法是仅在同一subprocess
调用中激活相关的conda环境:
subprocess.run('source activate base && multiqc .', shell = True)
但是,我有个好消息!从MultiQC v1.8(应在几天后发布)和请求请求#1042开始,您现在可以将MultiQC导入python脚本并作为函数运行。这更容易,更便携。您可以在此处查看示例:https://github.com/MultiQC/MultiQC_Notebook
基本脚本:
import IPython
import multiqc
multiqc.run('./path/to/data/')
IPython.display.IFrame('./multiqc_report.html', '100%', 600)