Python子进程:父对象与STDIN通信并在子进程中输出到STDOUT

时间:2014-04-04 03:15:58

标签: python python-2.7

我正在尝试使用Python子流程模块进行一系列有趣的要求。我想从父进程创建子进程,从父进程传递数据到该子进程,并在子进程的单独控制台上显示该数据。基本上,子进程必须能够输出到它的控制台屏幕。

最大的罪魁祸首似乎是 stdin = subprocess.PIPE 。当我在子进程中包含这样的参数时,我可以使用通信方法成功地将数据传递给子进程,但是我无法在其自己的控制台窗口中打印或查看输出。当我删除 stdin = subprocess.PIPE 时,我显然无法将数据从父级传递给子级,但子级中的任何通用打印/输出语句都可以在其自己的控制台中成功执行。它是一个或另一个。有没有我可以吃蛋糕并使用子进程吃它?

从' parent.py'传递数据的成功用例示例到了#child; py'可在此处找到:Python3 subprocess communicate example

下面的代码不起作用,但它通过向孩子发送字符串并尝试将其输出到新的控制台屏幕来说明我想要做什么。控制台已创建,但我看不到任何打印对话框。如果我删除stdin = subprocess.PIPE并完全避免将数据传递给子,输出到控制台工作正常。无论如何,时间调用都有效,所以child.py当然正在执行数据。

Parent.py

    import subprocess

    msg = "this is a message from parent"
    p = subprocess.Popen([python.exe, "Child.py"], stdin=subprocess.PIPE,
                          creationflags=subprocess.CREATE_NEW_CONSOLE)
    p.communicate(msg)

Child.py

    import time

    msg = input()
    print msg
    time.sleep(3.0)

感谢您的帮助!

修改1

p = subprocess.Popen([sys.executable, "Child.py"], stdin=subprocess.PIPE,
                      stdout=subprocess.PIPE, stderr=subprocess.PIPE)

对我不起作用。我的意图不是重定向标准输出。我想维护新子进程的stdout到控制台,但使用stdin = pipe将数据发送到该进程。当为管道设置stdin时,我可以向子节点发送数据,但是我不能输出任何数据,也不能运行任何函数(即print)来在子窗口中显示输出。这就是我想要做的事情。

0 个答案:

没有答案