如何让两个python进程通过管道进行交谈?

时间:2010-08-11 00:12:03

标签: python shell subprocess

我遇到麻烦这个问题。基本上我有一个python程序,期望stdin中的一些数据,即读取它作为sys.stdin.readlines()我已经测试了这个并且它正在运行没有问题像echo“”| myprogram.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”等工具中显示。

1 个答案:

答案 0 :(得分:2)

您想要重定向子流程的标准输入,因此您需要stdin=subprocess.PIPE

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