2010-08-11 47 views
0

我有麻烦得到这个工作。基本上我有一个Python程序,希望在标准输入中有一些数据,就是将它读作sys.stdin.readlines()我已经测试过这个,并且它没有像echo“”| myprogram.py如何让两个python进程通过管道交谈?

我有一个使用子模块用下面的代码

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”之类的工具中。

回答

2

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

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

+0

优秀,这正是我想念的谢谢! 至于'\ 4'的格式得到它。它被评论为一个测试,我确信它没有工作,但我留下它,以防万一我发送错误的字符。 – 2010-08-11 13:34:34