-1

这似乎很明显,但经过大量搜索后,无法找到正确的搜索词来获得答案。搜索诸如“连接到 python 内核”之类的东西只会找到关于 Jupyter 和 IPython 的页面和页面。

重击

我发现与使用协程的方法很接近。

我的理想是:

create_named_process proc1
create_named_process proc2

然后以某种方式向proc1发送命令并获取输出,然后向 proc2 发送命令获取输出。然后用更多的命令再做一遍。

Python

我确实找到了 Pythonsubprocess和 bash 子shell。但不知道如何让那些在后台继续运行并连接到他们。例如,我可以做

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

但是我认为如果我杀死启动子进程的进程,那么子进程就会死掉。(一位评论者说使用Shell=True将导致进程保持活动状态,但不确定我将如何访问它。他们删除了评论)。

另外,如何将更多命令传递给进程?文档中没有类似的内容。

请注意这篇文章包含编辑。

4

1 回答 1

1

我在搜索中不了解您的内核,但您似乎缺少一些有关 bash stdio/stderr 处理的基础知识。

一个进程(通常)有 3 个标准 io 流:

  • 标准输入(标准输入)
  • 标准输出(标准输出)
  • 标准错误(标准错误)

您可以使用管道( )或|文件(使用<>或)重定向所有这些 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(每行一个)进入fifo。

这有帮助吗?

于 2018-02-25T12:11:51.483 回答