我想使用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
可能是什么原因?
答案 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.split
或shlex.split
并将结果与subprocess
一起使用,请小心谨慎,这太容易绕过了。
添加shell = True
也应该有效但有很多副作用,请参阅official docs和this StackOverflow answer。
答案 1 :(得分:-1)
尝试shell = True
:
import subprocess
subprocess.call('loginctl show-session -p Display -p Active c2', shell= True)
输出:
Display=:0
Active=yes