【发布时间】:2021-11-10 17:41:18
【问题描述】:
我有一个如下所示的脚本部分:
if ( pstree -s $$ | grep -q 'sshd' ); then
SOME_VAR=foo
else
SOME_VAR=boo
fi
我需要在 python 中做同样的事情。有没有办法可以从 if() 中的命令获取布尔输出?也许使用退出代码或smth,所以代码看起来像这样:
if os.system("pstree -s $$ | grep -q 'sshd'"):
os.environ['SOME_VAR']='foo'
else:
os.environ['SOME_VAR']='boo'
我尝试像这样使用subprocess 库:
args = shlex.split("pstree -s $$ | grep -q 'sshd'")
p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
o, e = p.communicate()
print('Output: ' + o.decode('ascii'))
print('Error: ' + e.decode('ascii'))
print('code: ' + str(p.returncode))
但上面写着Error: pstree: invalid option -- 'q'
【问题讨论】:
-
您是否尝试过您发布的代码?
os.system版本适合我。 -
@Woodford 在我的情况下它设置了 boo,但它应该设置为“foo”
-
grep -q退出,0表示成功(找到模式),256表示失败(未找到模式)。通过 grep-ing 来检查您的结果,查找应该 不 找到的进程名称(例如grep -q 'notsshd) -
需要明确的是,
shlex.split()不会使管道工作。要使用不带shell=True的管道,您需要为管道的每一侧提供一个单独的subprocess.Popen对象。