【问题标题】:Binding / piping output of run() on/into function in python3 (lynux)python3(linux)中run()on/into函数的绑定/管道输出
【发布时间】:2017-09-04 06:02:14
【问题描述】:

我正在尝试使用 run 函数运行外部程序的输出。 这个程序会定期抛出一行我需要在我的脚本中使用的数据 我找到了一个 subprocess 库并使用了它的 run()/check_output()

示例:
def usual_process(): # some code here for i in subprocess.check_output(['foo','$$']): some_function(i)

现在假设 foo 已经在 PATH 变量中,并且它以半随机周期输出一个字符串。
我希望程序做自己的事情,并在每次 foo 向其输出发送新行时运行some_function(i)

这归结为两个问题。将输出输送到 for 循环中并将其作为后台子进程运行 谢谢


更新:我已经设法使用 This 将 foo 输出到 some_function

with os.popen('foo') as foos_output:
    for line in foos_output:
        some_function(line)

根据this os.popen 将被弃用,但我还没有弄清楚如何在 python 中管道内部进程 现在只需要弄清楚如何在后台运行这个函数

【问题讨论】:

  • 你的意思是linux?如果是这样,哪个发行版?
  • 在我对我的 Gentoo 进行编程和测试时,
    我试图将特定于发行版的代码限制在最低限度,并尽可能坚持使用 Pyton3。生成的代码最初将主要针对 Raspbian,但在后一个版本中是 android。根据 foo 的输出更新变量的意图很重要,而程序会做其他事情

标签: python parallel-processing subprocess function-binding


【解决方案1】:

所以,我已经解决了。 第一步是启动外部脚本:
proc=Popen('./cisla.sh', stdout=PIPE, bufsize=1)

接下来我启动了一个函数来读取它并将其传递给管道

def foo(proc, **args):
       for i in proc.stdout:
         '''Do all I want to do with each'''

foo(proc).start()`

限制是: 如果您希望捕获脚本错误,则必须通过管道输入。
其次是如果你杀死父母,它会留下一个僵尸所以不要忘记在信号处理中杀死孩子

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-12
    • 1970-01-01
    • 1970-01-01
    • 2010-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多