Python 将subprocess.Popen的输出传递给if elif语句

Python 将subprocess.Popen的输出传递给if elif语句,python,linux,Python,Linux,我正在创建一个python脚本来检查suPHP,我正在尝试创建一个if-else语句,以使用subprocess.Popen的输出声明suPHP是否在服务器上 在创建本文之前,我已经使用print测试了变量的输出,它将正确的输出传递给变量suphp。这就是我到目前为止所做的: # check for suPHP suphp = subprocess.Popen("/usr/local/cpanel/bin/rebuild_phpconf --current", shell=True, stdo

我正在创建一个python脚本来检查suPHP,我正在尝试创建一个if-else语句,以使用subprocess.Popen的输出声明suPHP是否在服务器上

在创建本文之前,我已经使用print测试了变量的输出,它将正确的输出传递给变量suphp。这就是我到目前为止所做的:

# check for suPHP
suphp =  subprocess.Popen("/usr/local/cpanel/bin/rebuild_phpconf --current", shell=True, stdout=subprocess.PIPE,).communicate()[0]

 if suphp = "/bin/sh: /usr/local/cpanel/bin/rebuild_phpconf: No such file or directory"          
    print "suPHP is not installed on the server"
 elif
    print suphp
请注意,我不熟悉编码和python,并决定尝试使用python来管理一些服务器。

我脑子里想不出:

比较运算符为==not=,输出后几乎总是跟一个换行符

因此,请尝试以下方法:

if "No such file or directory" in suphp:
    ...

在UNIX中,有时需要考虑子进程可以将文本输出到两个不同的输出流。当没有问题时,如使用
echo hello
,文本将被发送到

另一方面,进程将其所有错误消息发送到服务器被认为是一种良好的方式;例如,
stat/此文件不存在
。您可以通过将所有标准输出发送到
/dev/null
来验证这一点

运行此命令时,在控制台上不会得到任何输出:

stat . > /dev/null
运行此操作时,控制台上将显示一条错误消息(因为文本来自标准错误流):


回到您的问题,“标准错误”流有时被称为“stderr”。可以使用属性使用Python的
子流程
库捕获此流中的文本。

您似乎没有对
shell=True
做任何有用的事情,因此您可能可以安全地跳过它:

try:
    suphp = subprocess.Popen(["/usr/local/cpanel/bin/rebuild_phpconf", "--current"], 
                             stdout=subprocess.PIPE,).communicate()[0]
except OSError:
    print "Couldn't start subprocess, suPHP is not installed on the server"

请注意,您必须将命令拆分为每个单独的参数,因为您没有shell来为您执行此操作。除非您绝对需要(比如,因为您必须通过寻找脚本来设置您的环境)

否则您应该始终避免将shell用于子流程
=
应该是
=
。在
if
elif
两行的末尾都应该有一个
。也许阅读Python教程真的会为您节省很多时间。。。感谢您提供的信息和链接
try:
    suphp = subprocess.Popen(["/usr/local/cpanel/bin/rebuild_phpconf", "--current"], 
                             stdout=subprocess.PIPE,).communicate()[0]
except OSError:
    print "Couldn't start subprocess, suPHP is not installed on the server"