我没有得到以下代码的输出,但它也没有产生错误。当在命令行上手动输入命令时,我得到了很多输出。
grepCommand = "box | grep " + grepHostKey
grepCommand = grepCommand.split()
p = subprocess.Popen(grepCommand, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
(hostString, err) = p.communicate()
print hostString
print err
输出:
如果我添加shell = True,我只会从"框中获得预期的响应"命令并没有通过管道进入grep。我已经看到建议不要使用shell = True。我试过bufsize = 8192这个大到可以处理但仍然没有。对于什么是错的任何想法?
答案 0 :(得分:1)
管道是贝壳符号。这就是为什么这只能用于shell = True。但正如你所说,这不是最好的做法。下面是一个代码,您可以使用该代码手动管道子进程命令。
box_process = Popen(["box"], stdout=PIPE)
grep_process = Popen(["grep", grepHostKey], stdin=box_process.stdout, stdout=PIPE)
box_process.stdout.close()
(hostString, err) = grep_process.communicate()