加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

获取bash命令的结果并在python中使用它

发布时间:2020-12-15 22:12:29 所属栏目:安全 来源:网络整理
导读:我试图在 python中编写一个代码,从顶部获取一些信息并将其放入文件中. 我想只写下应用程序的名称并生成文件.我遇到的问题是我无法获得pidof命令的输出,所以我可以在python中使用它.我的代码看起来像这样: import osa = input('Name of the application')val
我试图在 python中编写一个代码,从顶部获取一些信息并将其放入文件中.
我想只写下应用程序的名称并生成文件.我遇到的问题是我无法获得pidof命令的输出,所以我可以在python中使用它.我的代码看起来像这样:

import os

a = input('Name of the application')
val=os.system('pidof ' + str(a)) 
os.system('top -d 30 | grep' + str(val) + '> test.txt')
os.system('awk '{print $10,$11}' test.txt > test2.txt')

问题是val总是有0但命令返回我想要的pid.任何输入都会很棒.

解决方法

首先,不鼓励使用input(),因为它希望用户输入有效的Python表达式.请改用raw_input():

app = raw_input('Name of the application: ')

接下来,系统的返回值(‘pidof’)不是PID,它是pidof命令的退出代码,即成功时为零,失败时为非零.你想要capture the output的pidof.

import subprocess

# Python 2.7 only
pid = int(subprocess.check_output(['pidof',app]))

# Python 2.4+
pid = int(subprocess.Popen(['pidof',app],stdout=subprocess.PIPE).communicate()[0])

# Older (deprecated)
pid = int(os.popen('pidof ' + app).read())

下一行在grep之后缺少一个空格,并且会产生像grep1234这样的命令.使用字符串格式化运算符%将使这更容易发现:

os.system('top -d 30 | grep %d > test.txt' % (pid))

第三行引用严重,应该导致语法错误.注意单引号内的单引号.

os.system("awk '{print $10,$11}' test.txt > test2.txt")

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读