我正在编写一个bash脚本,它将为我执行多个脚本,而不必在两者之间停止更改目录。我已经弄清楚如何在不同的目录中调用脚本,但我遇到一个问题,其中一个脚本(a.py)内部调用另一个脚本(b.py)。
通常,a.py和b.py都在同一个文件夹中,只需运行:
python a.py
这可以正常工作,因为a.py执行并在其自己的目录中找到b.py并且输出有效。但是当我执行bash脚本时它不起作用。 编辑:这是到目前为止的完整脚本:
#! /usr/bin/bash -x
mkdir $2
python ..\\get_coordinates.py
cd $2
python ..\\get_filenames.py
var1=$(find *.fa)
python ..\\a.py $var1 # Does something to files in var
我在cmd中运行的是:
>my_script.sh "coord1,coord2,coord3..." folderA
一切正常,直到调用似乎找不到b.py的a.py. 我不确定为什么它与a.py无法找到b.py?
编辑:这是我到达a.py后得到的错误。
python: can't open file 'b.py': [Errno 2] No such file or directory
Count not run command:
python b.py --output name.fasta name.fa
find: ‘*.fasta’: No such file or directory
答案 0 :(得分:0)
这是您的PYTHONPATH
环境变量
CD NewDir
PYTHONPATH=/dir/of/second_script;/dir/of/first_script python /dir/of/first_script/first.py
答案 1 :(得分:0)
问题出在PYTHONPATH
上。你可以做的是将这些行添加到a.py
文件(在文件的开头)
import os
import sys
runnig_dir = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, runnig_dir)
这会将a.py
的目录添加到PYTHONPATH
,然后从任何地方运行b.py
都可以正常工作。
答案 2 :(得分:0)
好的,我错过了一些非常明显的东西。由于我在创建主脚本(a.py和b.py)方面有所帮助,我意识到b.py中有一个参数解析器允许我包含一个调用b.py的参数
所以在我的bash脚本中,我将行改为:
python ..\\a.py -p ..\\b.py $var
现在它有效。但是,如果任何人仍然可以帮助我找到一种方法来调用b.py,如果没有使用argumentparser,那也会有所帮助!