我曾尝试使用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版)?
答案 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.
)