从子进程获得所需的输出

时间:2015-08-05 03:44:45

标签: python subprocess

我曾尝试使用subprocess来执行vsftpd。

>>> subprocess.call(['vsftpd -v'], shell=True)
vsftpd: version 3.0.2
0
>>> subprocess.check_output(['vsftpd -v'], shell=True)
vsftpd: version 3.0.2
''
>>> version = subprocess.check_output(['vsftpd -v'], shell=True)
vsftpd: version 3.0.2
>>> version
''
>>> 

您可以看到' vsftpd -v'的输出问题。包含"零字符"在末尾。当我想存储subprocess.check_output的输出时,它将是空字符串。 那么,获得正确输出的方法是什么(vsftpd:3.0.2版)?

1 个答案:

答案 0 :(得分:0)

请注意,版本信息正在REPL中打印。我相信这意味着它被写入stderr,而不是stdout。如果它要转到stdout,它将在version中捕获并且不显示(至少这是REPL在我的盒子上的工作方式)。

请改为尝试:

version = subprocess.check_output(
    'vsftpd -v',                 # Use string, not list, when shell = True.
    shell = True,
    stderr = subprocess.STDOUT,  # Capture both stdout and stderr.
)