【问题标题】:How to get two python processes talking over pipes?如何让两个 python 进程通过管道交谈?
【发布时间】:2010-08-11 00:12:02
【问题描述】:

我无法让它工作。基本上我有一个 python 程序,它期望标准输入中的一些数据,将其读取为 sys.stdin.readlines() 我已经对此进行了测试,并且它可以正常工作,例如 echo "" |我的程序.py

我有第二个程序,它使用子进程模块调用第一个程序,代码如下

    proc = subprocess.Popen(final_shell_cmd,
                stderr=subprocess.PIPE, stdout=subprocess.PIPE,
                shell=False), env=shell_env)
    f = ' '.join(shell_cmd_args)
    #f.append('\4')
    return proc.communicate(f)

第二个程序是一个守护进程,我发现第二个程序运行良好,只要我从第一个程序调用它后按 ctrl-d。

所以似乎子进程没有关闭文件和我的第一个程序在不应该发送更多输入时期望更多输入有问题。

有人知道我怎样才能让它工作吗?

这里的主要问题是“shell_cmd_args”可能包含密码和其他我们不希望作为命令名称传递的敏感信息,因为它会在“ps”等工具中显示。

【问题讨论】:

    标签: python shell subprocess


    【解决方案1】:

    你想重定向子进程的标准输入,所以你需要stdin=subprocess.PIPE

    您不需要将 Control-D ('\4') 写入文件对象。 Control-D 告诉 shell 关闭连接到程序的标准输入。程序在该上下文中看不到 Control-D 字符。

    【讨论】:

    • 太好了,这正是我所缺少的谢谢!至于 '\4' 的格式让它消失了。它被注释为测试,我确信它不起作用但我留下它以防万一我发送了错误的字符。
    猜你喜欢
    • 1970-01-01
    • 2016-05-05
    • 2023-04-08
    • 2016-03-27
    • 2010-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多