2015-02-11 113 views
0

我正在使用多个命令行参数执行python脚本,但使用shell脚本。将shell脚本命令转换为命令行

命令我执行的shell脚本的执行是:

./scripts/run_qa.sh data/questions/questions.txt data/lexicons/paralex data/weights/paralex.txt data/database > output.txt 

run_qa.sh文件看起来像下面(请解释它是如何工作):

#!/bin/bash 
set -u 
set -e 
if [ $# != 4 ]; then 
    echo "Usage: run.sh questions lexicon weights db" 
    exit 1 
fi 
questions=$1 
lexicon=$2 
weights=$3 
db=$4 
PYTHONPATH=$PWD/python python -m lex.gearman_worker $lexicon $weights $db < $questions 

我想下面执行Python命令在命令行

python -m python/lex/gearman_worker.py data/lexicons/paralex data/weights/paralex.txt data/database > output.txt 

whic小时之后获得错误:

/usr/bin/python: Import by filename is not supported. 

UPDATE1:

gearman_worker.py文件导入其他文件,如部份:

import lex.parse 
import lex.semantics 
from collections import namedtuple 
from collections import defaultdict 

进口行给出的错误是这样的:

ImportError: No module named lex.lexicon 

UPDATE2(在linux终端上执行):

export PYTHONPATH=$/mnt/paralex-evaluation-gearman/python 
PYTHONPATH = ./python python -m python/lex/gearman_worker data/lexicons/paralex data/weights/paralex.txt data/database > output.txt 

给出:

PYTHONPATH: command not found 

然后

python -m python/lex/gearman_worker data/lexicons/paralex data/weights/paralex.txt data/database > output.txt 

给出:

File "/mnt/paralex-evaluation-gearman/python/lex/gearman_worker.py", line 3, in <module> 
    import lex.lexicon 
ImportError: No module named lex.lexicon 
+0

@mu无:不好意思,更新它 – nlper 2015-02-11 11:07:39

回答

0

你只需要执行下面的命令:

PYTHONPATH=./python python -m lex.gearman_worker ARGUMENT_2 ARGUMENT_3 ARGUMENT_4 < ARGUMENT_1 

如果不工作,那么你可能要导出PYTHONPATH设置:

export PYTHONPATH=${PWD}/python 
python -m lex.gearman_worker ARGUMENT_2 ARGUMENT_3 ARGUMENT_4 < ARGUMENT_1 

原来的论点,你会传递给脚本被列为ARGUMENT_N

脚本只是:

你尝试的命令调用它:

  • 错过了PYTHONPATH设置这是目前在脚本
  • 经过gearman_worker模块作为一个文件,而不是一个Python模块导入
+0

你能请更新问题 – nlper 2015-02-11 11:09:57

+0

完成那。你很近。 – 2015-02-11 11:10:10

+0

我不想使用shell脚本,我想直接从终端执行命令。我做不到,你能帮忙吗 – nlper 2015-02-11 12:04:05