Bash脚本,从内部调用另一个脚本的不同目录运行脚本?

时间:2017-07-29 15:51:46

标签: python bash shell

我正在编写一个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

3 个答案:

答案 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,那也会有所帮助!