使用os.popen禁止打印到控制台? - Python

时间:2013-03-20 03:45:36

标签: python unix operating-system subprocess popen

使用popen到unix命令时,我会获得控制台的某些输出。

我知道subprocess.popen具有压低输出的功能。 Suppress output from subprocess.Popen

os.popen 具有相同的抑制功能吗?

请注意我在我的unix命令中管道,我无法让subprocess.Popen工作。我的命令看起来像这样

$ echo "es ist also grotesk , wenn herr jospin die europäische richtlinie und die britische datumsgestützte ausfuhrregelung gröblichst mißachtet und durch seine eigenen bedingungen zu ersetzen trachtet ." | treetagger/cmd/tree-tagger-german-utf8

3 个答案:

答案 0 :(得分:2)

请勿使用管道,请勿使用os.popen

import subprocess

text = "es ist also ..."
tt = subprocess.Popen('treetagger/cmd/tree-tagger-german-utf8', 
                      stdout=subprocess.PIPE, 
                      stderr=subprocess.PIPE,
                      stdin=subprocess.PIPE)
tagged, stderr = tt.communicate(txt)

在我成为Text+Berg corpus的处理管道开发人员的那一天,我为TreeTagger编写了一个包装类,绕过了包装脚本(无论如何都是质量可疑)。不幸的是,代码是专有的。

答案 1 :(得分:1)

只需使用subprocess.check_output即可。它将为您捕获字符串中的输出,并且还会自动执行错误检查(如果命令失败则抛出错误)。

答案 2 :(得分:0)

这样做:

result = subprocess.Popen(['command'], 
           stderr=subprocess.PIPE, stdout=subprocess.PIPE).communicate()[0]  

可以在documentation中找到更多信息。