如何对此CLI命令进行子处理

时间:2016-05-01 10:43:02

标签: python subprocess

我想使用Python获取此shell命令的输出:

loginctl show-session -p Display -p Active c2

输出是:

Display=:0
Active=yes

在Python中,我这样做:

import subprocess
subprocess.call(['loginctl', 'show-session -p Display -p Active c2'])

我收到此错误:

Unknown operation show-session -p Display -p Active c2

可能是什么原因?

2 个答案:

答案 0 :(得分:3)

subprocess.call(['loginctl', 'show-session', '-p', 'Display', '-p', 'Active', 'c2'])

或者,如果您对基本的shell拆分感到满意​​:

import shlex
cmd = 'loginctl show-session -p Display -p Active c2'
subprocess.call(shlex.split(cmd))

如果将用户输入直接发送到str.splitshlex.split并将结果与​​subprocess一起使用,请小心谨慎,这太容易绕过了。

添加shell = True也应该有效但有很多副作用,请参阅official docsthis StackOverflow answer

答案 1 :(得分:-1)

尝试shell = True

import subprocess
subprocess.call('loginctl show-session -p Display -p Active c2', shell= True)

输出:

Display=:0
Active=yes