从python运行linux命令

时间:2012-03-16 10:47:15

标签: python linux

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

ps -ef | grep rtptransmit | grep -v grep

我尝试过使用pythons命令库来执行此操作。

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

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

'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

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

5 个答案:

答案 0 :(得分:7)

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

不推荐使用ps模块。使用commands获取subprocess的输出并过滤Python中的输出。不要像其他答案所建议的那样使用ps -ef,在这种情况下这简直是多余的:

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

答案 1 :(得分:4)

我通常使用subprocess来运行外部命令。对于您的情况,您可以执行以下操作

from subprocess import Popen, PIPE

p = Popen('ps -ef | grep rtptransmit | grep -v grep', shell=True,
          stdout=PIPE, stderr=PIPE)
out, err = p.communicate()

输出将在out变量中。

答案 2 :(得分:4)

不推荐使用

commands,您不应该使用它。请改用subprocess

import subprocess
a = subprocess.check_output('ps -ef | grep rtptransmit | grep -v grep', shell=True)

答案 3 :(得分:1)

#!/usr/bin/python
import os

a = os.system("cat /var/log/syslog")

print a


from subprocess import call

b = call("ls -l", shell=True)

print b


import subprocess

cmd = subprocess.check_output('ps -ef | grep kernel', shell=True)

print cmd

以上任何脚本都可以为您工作:-)

答案 4 :(得分:-1)

nano test.py
import os
a = os.system('ps -ef | grep rtptransmit | grep -v grep')
print(a)
python test.py
python3 test.py

Run python file using both python and python3

Run python script using python and python3