小编pel*_*zza的帖子

使用curses和panel在Python中运行系统命令,然后返回上一级菜单

我正在使用顶级的几个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)

python curses subprocess panel

6
推荐指数
1
解决办法
2590
查看次数

解析预期输出

我正在尝试实时解析块缓冲程序的输出,这意味着直到进程结束才可用。我需要的只是逐行解析,过滤和管理输出中的数据,因为它可能要运行数小时。

我试图用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)

python parsing subprocess pexpect output

5
推荐指数
1
解决办法
1万
查看次数

pythonic方式到十六进制转储文件

我的问题很简单:

有没有办法用pythonic方式编码bash命令?

hexdump -e '2/1 "%02x"' file.dat
Run Code Online (Sandbox Code Playgroud)

显然,不使用os,popen或任何捷径;)

编辑:虽然我没有明确指定,但如果代码在Python3.x中有效,那将会很棒

谢谢!

python hexdump

4
推荐指数
3
解决办法
2万
查看次数

标签 统计

python ×3

subprocess ×2

curses ×1

hexdump ×1

output ×1

panel ×1

parsing ×1

pexpect ×1