将 shell 脚本命令转换为命令行
Convert shell script command to command line
我正在使用多个命令行参数执行 python 脚本,但使用的是 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=
lexicon=
weights=
db=
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
给出错误:
/usr/bin/python: Import by filename is not supported.
更新 1:
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
您只需要执行以下命令:
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
。
脚本只是:
- 设置一些合理的默认值(参见 the documentation for set)
- 测试是否提供了正确数量的参数
- 调用上面的命令
您尝试调用它:
- 缺少脚本中存在的
PYTHONPATH
设置
- 将 gearman_worker 模块作为文件而不是 python 模块导入
我正在使用多个命令行参数执行 python 脚本,但使用的是 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=
lexicon=
weights=
db=
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
给出错误:
/usr/bin/python: Import by filename is not supported.
更新 1:
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
您只需要执行以下命令:
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
。
脚本只是:
- 设置一些合理的默认值(参见 the documentation for set)
- 测试是否提供了正确数量的参数
- 调用上面的命令
您尝试调用它:
- 缺少脚本中存在的
PYTHONPATH
设置 - 将 gearman_worker 模块作为文件而不是 python 模块导入