Flo*_*ita 4 python bash command operating-system
我试图在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')
Run Code Online (Sandbox Code Playgroud)
问题是val总是有0但命令返回我想要的pid.任何输入都会很棒.
首先,input()
不鼓励使用,因为它希望用户键入有效的Python表达式.raw_input()
改为使用:
app = raw_input('Name of the application: ')
Run Code Online (Sandbox Code Playgroud)
接下来,返回值system('pidof')
不是PID,它是pidof
命令的退出代码,即成功时为零,失败时为非零.你想捕获输出的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())
Run Code Online (Sandbox Code Playgroud)
下一行是缺少一个空格后grep
会产生一个像这样的命令grep1234
.使用字符串格式化操作符%
将使这更容易发现:
os.system('top -d 30 | grep %d > test.txt' % (pid))
Run Code Online (Sandbox Code Playgroud)
第三行引用严重,应该导致语法错误.注意单引号内的单引号.
os.system("awk '{print $10, $11}' test.txt > test2.txt")
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3162 次 |
最近记录: |