如何启动背景外壳或内核(例如Python),连接到它并检索输出



这似乎很明显,但是经过大量搜索,无法找到正确的搜索术语来获得答案。搜索"连接到Python内核"之类的东西。仅提出有关Jupyter和Ipython的页面和页面。

bash

我发现了使用协调的内容。

我理想的是:

create_named_process proc1
create_named_process proc2

然后SomeHow将命令发送到 proc1 并获取输出并将命令发送到 proc2 并获取输出。然后再用更多命令进行操作。

python

我确实找到了Python subprocess和Bash子壳。但是不确定如何使这些人在后台和与他们联系。例如,我可以做

process = subprocess.Popen(['your_background_command'])
stdoutdata, stderrdata = process.communicate()

但是我认为,如果我杀死了该过程,我就开始了子过程,那么子过程将会死亡。(一位评论者说,使用Shell=True会导致该过程保持生命,但不确定我将如何访问它。他们删除了评论(。

另外,如何将更多命令传递给该过程?文档中没有什么。

note 本文包含编辑。

我在搜索中不了解您的内核,但是您似乎缺少有关Bash Stdio/STDERRing的一些基础知识。

一个过程具有(常态(3标准IO流:

  • stdin(标准输入(
  • Stdout(标准输出(
  • stderr(标准错误(

您可以用管道(|(或文件(使用<><<>>(重定向所有这些IO流。例如:

ls -l | grep "r-x" | sed 's/^.*:...//' > 5_files.list

您可以使用FIFO,而不是普通文件:

mkfifo fifootje
tail -f fifootje | grep --line-buffered "r-x"  
ls -l > fifootje

或以您的命令想法:

#!/bin/bash
mkfifo fifootje
while read line ; do
    case "$line" in
    (a) ls /tmp ;;
    (b) ls /var ;;
    (*) echo 'only a or b please' ;;
    esac
done

,然后回声ab(每行1(进入FIFO。

这有帮助吗?

最新更新