0

我有一个基准线程正在运行,它需要几个小时才能运行。启动基准线程的脚本是使用 python 完成的。它打印出一些随机的“foo”,我想对其进行 grep 以供进一步使用。

因此,我编写了一个执行此操作的 shell 脚本。

#!/bin/bash

id = `taskset -c 0 python <path>/run-apps.py <thread> | grep "pid" | awk '{print $2}'`
echo $id

因为,线程需要很长时间。也许shell脚本在执行结束之前无法跳转到下一行,并且我无法在它启动后立即打印id..

你看有什么问题吗?或者我该如何纠正这个?

4

1 回答 1

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
于 2013-02-04T21:19:39.737 回答