python - 从 python 运行 linux 命令

标签 python 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

有谁知道如何阻止输出被切断,或者有人可以建议另一种方法吗?

最佳答案

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 命令,您可以通过它直接搜索特定进程。

关于python - 从 python 运行 linux 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32966287/

相关文章:

python - 多进程模块中子进程的运行顺序

Python 请求库 pre_request 钩子(Hook)

Python 线程模块无法识别 args

java - 运行一个在 windows 和 Linux 平台上运行的 Java 开发的 web 项目

linux - 按特定名称递归查找目录,然后清除它们

linux - 在 Ubuntu 上将 .swp 文件存储在/tmp 中需要添加到 vimrc 中的行是什么

python - 使用 MultipartPostHandler 通过 Python 发布表单数据

python - 将二维数组或列表拆分为python中的两个一维列表

c - 哪种方法更适合在 c 中的两个进程之间进行对话?

c - UNIX 套接字权限 (Linux)