【发布时间】:2016-03-28 20:07:57
【问题描述】:
我正在编写一个 shell 脚本,它设置一些参数并调用一个 python 脚本。有时 python 脚本挂起,当我按 ctrl-c 时,它会生成一些错误输出。我正在尝试将其写入文件。当我执行 shell 脚本并按 ctrl-c 时,我会在重定向文件中得到输出,但是如果我尝试通过休眠一段时间并终止进程来模拟 ctrl-c,则输出不会重定向到文件。我使用了 SO 中的一些示例来执行睡眠和终止工作,但输出文件没有我从 ctrl-c 手动操作得到的错误。
我无法更改此脚本正在执行的 python 脚本,所以我必须在调用脚本中实现它。
[ -z "$1" ] && echo "No environment argument supplied" && exit 1
. env_params.txt
. run_params.txt
echo "========================================================== RUN STARTED AT $B ==========================================================" >> $OUTFILE
echo " " >> $OUTFILE
export RUN_COMMAND="$PYTHON_SCRIPT_LOC/pyscript.py PARAM1=VALUE1 PARAM2=VALU2 PAram3=value3"
echo "Run command from test.sh $RUN_COMMAND" >> $OUTFILE
echo " " >> $OUTFILE
echo " " >> $OUTFILE
echo "========================================================== Running Python script ==========================================================" >> $OUTFILE
echo "Before python command"
###############################################
( python $RUN_COMMAND >> $OUTFILE 2>&1 ) & pid=$!
SLEEP_TIME=1m
echo "before sleep - sleeping for $SLEEP_TIME $pid"
( sleep $SLEEP_TIME && kill -HUP $pid ) 2>/dev/null & watcher=$!
if wait $pid 2>/dev/null; then
echo "after sleep - sleeping for $SLEEP_TIME $pid"
echo "your_command finished"
pkill -HUP -P $watcher
wait $watcher
else
echo "after sleep - sleeping for $SLEEP_TIME $pid"
echo "your_command interrupted"
fi
### also tried this - did not work either
### python $RUN_COMMAND >> $OUTFILE 2>&1 &; (pythonPID=$! ; sleep 1m ;kill -s 2 $pythonPID)
.
.
我需要进行哪些更改,以便在脚本本身中终止进程时将输出写入 $OUTFILE,而不是在终端上按 ctrl-c?
【问题讨论】:
-
这不可能做我需要做的事吗?
标签: bash shell redirect output