shell Bash脚本在终端中正常运行,但在使用os.system运行时“未找到命令”

ryhaxcpt  于 2023-08-07  发布在  Shell
关注(0)|答案(2)|浏览(205)

我是新来的。我已经在我的shell中安装了“seqtk”和“magicblast”,并在终端上调用“conda install”,当我直接在终端上调用它们或将它们写入bash脚本(test.sh)并在终端上运行该脚本时,它们可以正常工作。
这里是test.sh

#!/bin/bash

var1=$(sed 's/\.fastq\.gz/\.fa/' <<< $1)
seqtk seq -a $1 > $(basename $var1)

字符串
这样就行了
第一个月
但是当我尝试使用Python(test.ipynb)运行脚本时

import os

os.system("./test.sh sample_folder/sample_R1.fastq.gz")


it gives me“seqtk:未找到命令
我在谷歌上搜索,并认为这是因为我在我的shell中安装了命令,但'os.system'会启动一个新的shell并在那里运行命令,这就是为什么test.ipynb显示“未找到命令”,而命令可以在终端上正常工作。
我想知道我该如何解决这个问题。
提前感谢!
我还尝试使用“source”通过os.system(“source HOME/.bash_aliases”)解决这个问题,这失败了,并显示“source:未找到”。我真的不知道如何使用这个命令。

nwsw7zdq

nwsw7zdq1#

我看到您将包含Python程序的文件命名为 test.ipynb。这表明您正在Jupyter笔记本或其他IDE中运行它。Mamba(类似于Anaconda)是一个虚拟环境管理器。您必须激活虚拟环境才能使用它。激活意味着更新env变量;最重要的是PATH,用于定位外部命令。Env变量对于每个进程都是私有的,因此当您在一个shell中激活Mamba环境时,它不会在任何其他进程中激活它。
你可以做@pts在他们的回答中建议的事情,但我建议不要这样做。它是脆弱的,只是引入了另一个令人困惑的行为来源。您可以通过更改工作流来更好地从激活Mamba环境的shell启动IDE,否则可以学习从该shell运行依赖于Mamba环境的任何程序。

tf7tbtn2

tf7tbtn22#

一个快速的解决方法是在Python中这样做:

os.environ['PATH'] = os.pathsep.join((
    '/mnt/data/my_folder/mambaforge/bin', os.environ['PATH']))
os.system('seqtk ...')  # It will work.
os.system('./test.sh ...')  # It will work.

字符串
但是,为了长期的可维护性,您应该激活虚拟环境。这样做将负责修改PATH和其他相关的环境变量。详情请看@KurtisRader的回答。

相关问题