我有一个基准线程运行,运行需要几个小时。 启动基准线程的脚本是使用python完成的。 它打印出一些随机的“foo”,我想grep它以供进一步使用。
所以,我编写了一个执行此操作的shell脚本。
#!/bin/bash
id = `taskset -c 0 python <path>/run-apps.py <thread> | grep "pid" | awk '{print $2}'`
echo $id
因为,线程需要很长时间。 也许shell脚本无法跳转到下一行,直到执行结束,我无法在启动它时立即打印它。
你看到有什么问题吗?或者我如何纠正这个问题?答案 0 :(得分:1)
本声明
echo $id
在前一个语句
之前无法运行id=`taskset -c 0 python <path>/run-apps.py <thread> | grep "pid" | awk '{print $2}'`
完成。如果您不需要$id
,请删除它,然后运行
taskset -c 0 python <path>/run-apps.py <thread> | grep "pid" | awk '{print $2}'
查看生成的输出(但您可能需要禁用缓冲,如Martijn所指出的)。如果确实需要$id
,则可以使用tee
命令
存储输出的副本并同时将其打印到标准错误:
id=$(taskset -c 0 python <path>/run-apps.py <thread> |\
grep "pid" | awk '{print $2}' | tee /dev/stderr) # Or some other file descriptor that goes to your terminal
第三种选择是使用临时文件。
taskset -c 0 python <path>/run-apps.py <thread> | grep "pid" | awk '{print $2}' > tmpfile &
tail --pid $! -f tmpfile # Watch tmpfile until the backgrounded job completes
do-other-job --reading-from tmpfile