一尘不染

从python运行linux命令

linux

我需要从python运行此linux命令,并将输出分配给变量。

ps -ef | grep rtptransmit | grep -v grep

我试过使用pythons命令库来做到这一点。

import commands
a = commands.getoutput('ps -ef | grep rtptransmit | grep -v grep')

但是a结束了。我得到的输出是:

'nvr      20714 20711  0 10:39 ?        00:00:00 /opt/americandynamics/venvr/bin/rtptransmit setup_req db=media  camera=6  stream=video  substream=1  client_a'

但预期的输出是:

nvr      20714 20711  0 10:39 ?        00:00:00 /opt/americandynamics/venvr/bin/rtptransmit setup_req db=media  camera=6  stream=video  substream=1  client_address=192.168.200.179  client_rtp_port=6970  override_lockout=1  clienttype=1

有人知道如何阻止输出中断吗?有人可以建议其他方法吗?


阅读 403

收藏
2020-06-03

共1个答案

一尘不染

ps显然限制了其输出以适合终端的假定宽度。您可以使用$COLUMNS环境变量或--columns选项覆盖此宽度ps

commands模块已弃用。使用subprocess得到的输出ps -ef,并在Python进行过滤。不要shell=True按照其他答案的建议使用,在这种情况下,它只是多余的:

ps = subprocess.Popen(['ps', '-ef', '--columns', '1000'], stdout=subprocess.PIPE)
output = ps.communicate()[0]
for line in output.splitlines():
    if 'rtptransmit' in line:
        print(line)

您可能还需要看一下pgrep可以直接搜索特定进程的命令。

2020-06-03