我正在使用顶级的几个commanline工具编写python脚本,所以我需要一个适当的视觉反馈.现在是时候给它一个菜单,所以这就出现了问题.
我在这里找到了我需要的一个很好的方法,但每次尝试在回到上一个菜单之前显示反馈都是徒劳的.
我只需要菜单,子菜单,启动命令,终止它,然后返回上一级菜单.一个伟大的奖金将是在一个分裂的期限运行它们.
是否有任何模式/骨架/东西/什么用作模板,以显示具有可预测输出的几种小部件?
这是一个代码示例,它运行的两个函数示例:
#!/usr/bin/env python2
import curses
from curses import panel
class Menu(object):
def __init__(self, items, stdscreen):
self.window = stdscreen.subwin(0,0)
self.window.keypad(1)
self.panel = panel.new_panel(self.window)
self.panel.hide()
panel.update_panels()
self.position = 0
self.items = items
self.items.append(('exit','exit'))
def navigate(self, n):
self.position += n
if self.position < 0:
self.position = 0
elif self.position >= len(self.items):
self.position = len(self.items)-1
def display(self):
self.panel.top()
self.panel.show()
self.window.clear()
while True:
self.window.refresh()
curses.doupdate()
for index, item in enumerate(self.items):
if index == self.position:
mode = curses.A_REVERSE
else: …Run Code Online (Sandbox Code Playgroud) 我正在尝试实时解析块缓冲程序的输出,这意味着直到进程结束才可用。我需要的只是逐行解析,过滤和管理输出中的数据,因为它可能要运行数小时。
我试图用subprocess.Popen()捕获输出,但是是的,正如您可能猜到的那样,Popen无法管理这种行为,它会一直缓冲直到过程结束。
from subprocess import Popen, PIPE
p = Popen("my noisy stuff ", shell=True, stdout=PIPE, stderr=PIPE)
for line in p.stdout.readlines():
#parsing text and getting data
Run Code Online (Sandbox Code Playgroud)
因此,我发现了pexpect,它可以实时输出输出,因为它将stdout视为文件,或者我什至可以做一个肮脏的技巧来打印文件并在函数外部解析它。但是好吧,即使对于我来说,它也太脏了;)
import pexpect
import sys
pexpect.run("my noisy stuff", logfile=sys.stdout)
Run Code Online (Sandbox Code Playgroud)
但我想这应该是一种更好的pythonic方式,只需像子进程一样管理stdout。普朋呢。我怎样才能做到这一点?
编辑:
运行JF提案:
这是故意的错误审核,大约需要25秒。停止。
from subprocess import Popen, PIPE
command = "bully mon0 -e ESSID -c 8 -b aa:bb:cc:dd:ee:00 -v 2"
p = Popen(command, shell=True, stdout=PIPE, stderr=PIPE)
for line in iter(p.stdout.readline, b''):
print "inside loop"
print line
print "outside loop"
p.stdout.close()
p.wait()
#$ sudo python SCRIPT.py …Run Code Online (Sandbox Code Playgroud) 我的问题很简单:
有没有办法用pythonic方式编码bash命令?
hexdump -e '2/1 "%02x"' file.dat
Run Code Online (Sandbox Code Playgroud)
显然,不使用os,popen或任何捷径;)
编辑:虽然我没有明确指定,但如果代码在Python3.x中有效,那将会很棒
谢谢!