我遇到麻烦这个问题。基本上我有一个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”等工具中显示。
答案 0 :(得分:2)
您想要重定向子流程的标准输入,因此您需要stdin=subprocess.PIPE
。
您不需要将Control-D('\4'
)写入文件对象。 Control-D告诉shell关闭连接到程序的标准输入。该程序在该上下文中没有看到Control-D字符。