我需要从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
有没有人知道如何阻止输出被切断或者有人可以提出另一种方法吗?
答案 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