如何子处理此 CLI 命令
How to subprocess this CLI command
我想使用 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
可能是什么原因?
试试 shell = True
:
import subprocess
subprocess.call('loginctl show-session -p Display -p Active c2', shell= True)
输出:
Display=:0
Active=yes
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 and this Whosebug answer。
我想使用 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
可能是什么原因?
试试 shell = True
:
import subprocess
subprocess.call('loginctl show-session -p Display -p Active c2', shell= True)
输出:
Display=:0
Active=yes
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 and this Whosebug answer。