代码之家  ›  专栏  ›  技术社区  ›  Jorge Vargas

如何让两个python进程通过管道进行对话?

  •  0
  • Jorge Vargas  · 技术社区  · 16 年前

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

        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\u cmd\u args”可能包含密码和其他我们不想作为命令名传入的敏感信息,因为它将在“ps”等工具中显示。

    1 回复  |  直到 16 年前
        1
  •  2
  •   Daniel Stutzbach Edward Leno    16 年前

    您想重定向子进程的stdin,因此需要 stdin=subprocess.PIPE .

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