如何使用curses在终端中编写三行不断更新的行?

2024-01-12

我有一个程序需要输出三个不断变化的消息。连接数、已用时间和拒绝的连接。

我尝试用以下方式写它们'\r'在字符串末尾并在其他开始自己的输出循环之前打印换行符,认为回车符会返回一行。但它们最终都在第一行互相覆盖。

我见过类似的问题,人们推荐使用curses但我似乎无法让它发挥作用。我尝试使用addstr()代替print or sys.stdout.write()但显然我做得不对,因为它最终看起来像this. https://i.stack.imgur.com/08T42.png我也尝试过使用move(0,0)每次之后addstr因为我认为坐标可能是根据光标的最后位置计算的,但输出看起来与我没有这样做时相同

这是我当前使用的代码curses -

from scapy.all import *
from curses import wrapper 
import argparse, random, socket, sys, time, os, threading, re, subprocess, curses

def main(target):
    try: 
        stdscr.clear()
        curses.noecho()
        curses.cbreak()
        stdscr.keypad(1)

        #things regarding user agents and iptables

            for conn in range(args.connections):
                t = threading.Thread(target=sendPacket, args=(targetIP, args.port, targetHost,random.choice(userAgents)))
                threads.append(t)
                t.start()
                numConn += 1

                try:
                    lock.acquire()
                    stdscr.addstr(0, 0,'{0} Connections Established to {1} '.format(numConn,getIP(target)))
                    stdscr.refresh()
                    #sys.stdout.flush()
                finally:
                    lock.release()
            time.sleep(args.timer)  


        CloseWin()
        sys.exit()
    except KeyboardInterrupt, e:
        lock.acquire()
        stdscr.addstr (5,0,'Exiting {0}'.format(e))
        CloseWin()
        lock.release()
        sys.exit()

#functions that deal with resolving host and IP

def sendPacket(targetIP,targetPort,targetHost,userAgent):
    try:
        #building and sending the packet
        failPacket = 0
        lock.acquire()
        if synack is None:
            stdscr.addstr(1, 0, '{0} Connections refused'.format(failPacket))
            stdscr.refresh()
            failPacket += 1
            return

        #send final packet

        lock.release()
        return
    except Exception,e:
        CloseWin()
        #print e
        lock.release()
        return 



def MeasureTime():
try:
    lock.acquire()
    while True:
        stdscr.addstr(3, 0,'{0} Time elapsed'.format(time.time() - startTime))
        stdscr.refresh()
finally:
    lock.release()

def CloseWin():
try:
    lock.acquire()
    curses.nocbreak()
    stdscr.keypad(0)
    curses.echo()
    curses.endwin()
finally:
    lock.release()

if __name__ == '__main__':

    #args

    stdscr = curses.initscr()

    if args.debug == True:
        wrapper(OneConn(args.target)) #OneConn is the same as the main function except it only opens one connection, so the print is the same
    else:
        startTime = time.time()
        wrapper(main(args.target))

另外,除了写得不正确之外,当我使用时,我似乎无法正确关闭它ctrl+c试图出去,看起来它停止更新有关数据包的打印输出,但时间仍在继续。除了关闭终端之外我想不出其他方法来阻止它。

尝试根据 @martinaeu 的建议添加锁,并编辑帖子以展示我所做的事情。结果我只能看到time elapsed在第四行中打印并更新,根本看不到其他打印,并且在不关闭终端的情况下仍然无法退出程序


而不是使用curses,您只需发出原始代码即可将光标向后移动三行。这将是:

os.write(1, "\x1b[3F")

小心:线条不会被擦除。如果您打印的新行与旧行的长度相同(例如,因为它们的格式类似于"foo: %10d").

参考:https://en.wikipedia.org/wiki/ANSI_escape_code#CSI_codes https://en.wikipedia.org/wiki/ANSI_escape_code#CSI_codes(其中“CSI”代表“\x1b[”,n 是一个以十进制表示的可选数字)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用curses在终端中编写三行不断更新的行? 的相关文章

  • Python setuptools:如何在 setup.py 中添加私有存储库 (gitlab)?

    我上传了 2 个包 它们位于我的 gitlab 存储库中 如果我想使用 pip 将它们安装在我的系统中 这很容易 因为 gitlab 可以帮助您 https docs gitlab com ee user packages pypi rep
  • 如何将base64字符串直接解码为二进制音频格式

    音频文件通过 API 发送给我们 该文件是 Base64 编码的 PCM 格式 我需要将其转换为 PCM 然后再转换为 WAV 进行处理 我能够使用以下代码解码 gt 保存到 pcm gt 从 pcm 读取 gt 保存为 wav decod
  • Flask+Nginx+uWSGI:导入错误:没有名为站点的模块

    我安装为http www reinbach com uwsgi nginx flask virtualenv mac os x html http www reinbach com uwsgi nginx flask virtualenv
  • 切片稀疏(scipy)矩阵

    我将不胜感激任何帮助 以理解从 scipy sparse 包中切片 lil matrix A 时的以下行为 实际上 我想根据行和列的任意索引列表提取子矩阵 当我使用这两行代码时 x1 A list 1 x2 x1 list 2 一切都很好
  • PyQt:如何通过匿名代理使用网页

    这真让我抓狂 我想在 QWebPage 中显示一个 url 但我想通过匿名代理来实现 Code setting up the proxy proxy QNetworkProxy proxy setHostName 189 75 98 199
  • 即使页面未完全加载,我们也可以使用 Selenium 获取页面源吗(TimeoutException: Message: timeout)?

    即使遇到 TimeoutException Message timeout 也能获取页面源码吗 当我调用 driver page source 时 有时无法加载整页 但我只需要它的部分信息 尚未确定 所以我只想在任何情况下保存页面 是否可以
  • 从Python中的字符串中提取货币金额

    我正在制作一个程序 从字符串中获取货币并将其转换为其他货币 例如 如果字符串是 the car cost me 13 250 我需要得到 and 13250 我已经有了这个正则表达式 1 确实如此 但是该字符串很有可能有多个价格 并且全部使
  • Python在postgresql表中查找带有单引号符号的字符串

    我需要从 psql 表中查找包含多个单引号的字符串 我当前的解决方案是将单引号替换为双单引号 如下所示 sql query f SELECT exists SELECT 1 FROM table name WHERE my column m
  • 如何使用显式引用转储 YAML?

    递归引用非常适合ruamel yaml or pyyaml ruamel yaml dump ruamel yaml load A A id001 id001 然而 它 显然 不适用于普通引用 ruamel yaml dump ruamel
  • Tweepy StreamListener 到 CSV

    我是 python 新手 我正在尝试开发一个应用程序 使用 Tweepy 和 Streaming API 从 Twitter 检索数据并将数据转换为 CSV 文件 问题是此代码不会创建输出 CSV 文件 也许是因为我应该将代码设置为在实现例
  • 了解 Python 中的酸洗

    我最近接到一项作业 需要以腌制形式放置一本字典 其中每个键引用一个列表 唯一的问题是我不知道腌制形式是什么 谁能给我指出一些好的资源的正确方向来帮助我学习这个概念 pickle 模块实现了一个基本但强大的算法 用于序列化和反序列化 Pyth
  • 更改 Altair 中的构面标题位置?

    如何将方面标题 在本例中为年份 移动到每个图的上方 默认值似乎位于图表的一侧 这可以轻易改变吗 import altair as alt from vega datasets import data df data seattle weat
  • 如何将 self 传递给装饰器?

    我该如何通过self key下面进入装饰器 class CacheMix object def init self args kwargs super CacheMix self init args kwargs key func Cons
  • python 中的 Johansen 协整检验

    我找不到任何有关在处理统计和时间序列分析 pandas 和 statsmodel 的 Python 模块中执行 Johansen 协整检验的功能的参考 有谁知道是否有一些代码可以执行时间序列之间的协整测试 现在 这已在 Python 的 s
  • 具有屏蔽无效值的 pcolormesh

    我试图将一维数组绘制为 pcolormesh 因此颜色沿 x 轴变化 但每个 x 的 y 轴保持不变 但我的数据有一些错误值 因此我使用屏蔽数组和自定义颜色图 其中屏蔽值设置为蓝色 import numpy as np import mat
  • Python 声音(“铃声”)

    我想让一个 python 程序在完成任务时通过发出嘟嘟声来提醒我 目前 我使用import os然后使用命令行语音程序说 进程完成 我更愿意它是一个简单的 铃 我知道有一个函数可以用于Cocoa apps NSBeep 但我认为这与此没有太
  • Python]将两个文本文件合并为一个(逐行)[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我是蟒蛇新手 我想做的是将文件 a 和文件 b 逐行合并到一个文件中 例如 text file a a n b n c text fi
  • 对数据帧的每 2 小时数据进行 Groupby

    我有一个数据框 Time T201FN1ST2010 T201FN1VT2010 1791 2017 12 26 00 00 00 854 69 0 87 1792 2017 12 26 00 20 00 855 76 0 87 1793
  • 处理大文件的最快方法?

    我有多个 3 GB 制表符分隔文件 每个文件中有 2000 万行 所有行都必须独立处理 任何两行之间没有关系 我的问题是 什么会更快 逐行阅读 with open as infile for line in infile 将文件分块读入内存
  • 长/宽数据到宽/长

    我有一个数据框 如下所示 import pandas as pd d decil 1 decil 1 decil 2 decil 2 decil 3 decil 3 decil kommune AA BB AA BB AA BB 2010

随机推荐

  • 使用 Python 将 .h5 文件转换为 .jpg

    我目前有一个包含灰度图像的 h5 文件 我需要将其转换为 jpg 有人有这方面的经验吗 注意 我可以将 h5 文件转换为 numpy 数组 然后使用 pypng 等外部库将其转换为 png 但我想知道是否有更有效的方法来转换为图像 最好是
  • 从Python中的另一个函数中断函数执行

    我有一个函数a执行一些任务和其他功能b是对某些事件的回调 每当事件发生时 函数b被调用 我想让它能够中断函数的执行a 这两个函数都在同一个类中声明 功能a不应该调用函数b 功能b是完全独立的 它是对来自 ROS 机器人操作系统的 检测到用户
  • 是否可以直接选择 EXISTS 作为位?

    我想知道是否可以做这样的事情 这不起作用 select cast exists select from theTable where theColumn like theValue as bit 看起来应该是可行的 但是很多应该在 SQL
  • MSDeploy/WebDeploy - 通过 DacPac 部署复合数据库项目

    我们有一个数据库项目 其中的视图连接到另一个数据库中的表 另一个数据库采用不同的解决方案 在我们从其他数据库添加对 DacPac 的引用之前 此构建失败 我相信这些视图被视为 复合数据库对象 因为它们引用的对象未作为脚本包含在数据库中 而是
  • 用 C/C++ 计算 32 位 CRC 查找表

    我想计算一个 32 位 CRC 查找表 我尝试的一种方法是使用以下代码这个网站 http www barrgroup com Embedded Systems How To CRC Calculation C Code include
  • Map/Set 维护唯一的数组数组,Javascript

    我正在尝试构建唯一的数组数组 这样每当我要添加新数组时 只有在集合中尚不存在该数组时才应添加它 例如 存储 1 1 2 的所有唯一排列 实际的 1 1 2 1 2 1 1 1 2 1 2 1 2 1 1 2 1 1 预期的 1 1 2 1
  • FullCalendar.js - “获取事件时出错”

    我正在使用 FullCalendar js 显示来自多个来源的 Google 日历事件 到今天为止一直工作正常 由于某种原因 FullCalendar 开始弹出 获取事件时出错 错误消息 并且所有事件显然都消失了 这是一个jsfiddle
  • 保存到 UserDefaults 时应用程序总是崩溃

    我不知道出了什么问题 extension UserDefaults static let shared UserDefaults suiteName SharedGroupName static func set object Any fo
  • 正则表达式查找具有不同顺序的相同数字的数字

    我已经在 Google 上寻找正则表达式一个小时左右了 但似乎无法解决这个问题 如果我有电话号码 请说 2345 我想找到具有相同数字但顺序不同的任何其他数字 如下所示 2345 比如我匹配 3245 or 5432 数字相同但顺序不同 我
  • 同步数据从主存储器读取/写入

    当synchronized方法执行完成时 是只将其修改的数据推送到主存 还是所有的成员变量 同样 当synchronized方法执行时 是只从主存中读取自己需要的数据 还是清除所有的成员变量 缓存中的成员变量并从主存中读取它们的值 例如 p
  • 如何在 Tensorflow 2.0 中应用 Guided BackProp?

    我从Tensorflow 2 0并尝试实现 Guided BackProp 来显示显着性图 我首先计算之间的损失y pred and y true图像的梯度 然后找到由于这种损失而导致的所有层的梯度 with tf GradientTape
  • 在React中获取存储在Azure Blob存储中的json文件数据

    我是 React 新手 我正在尝试从存储在 Azure blob 存储中的 json 文件获取数据 file https mcbstorageprod blob core windows net exports person json 我使
  • ALSA:不支持非交错访问?

    ALSA s snd pcm hw params set access http www alsa project org alsa doc alsa lib group p c m h w params html ga4c8f1c6329
  • C# 如何将整数视为数组? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 假设我有 5 个整数这不是数组 我想
  • Arduino F()宏的实现

    我试图了解 Arduino 中的 F 宏实际上对 PGMEM 和 RAM 做了什么以及运行时的影响是什么 有人可以指出定义这个宏的文件吗 这可能是旧版本 但定义它的一个地方是Wstring h as in here http andybro
  • 即使 ssh 有效,Gitlab 也无法克隆存储库

    正如标题所述 即使 ssh 似乎可以工作 我也无法从 Gitlab 6 服务器克隆存储库 当尝试克隆时 它看起来像这样 git clone ssh email protected cdn cgi l email protection 133
  • 如何正确删除使用sonata-media-bundle上传的所有图像

    我已经按照建议使用 sonata media bundle 上传了一些图像here http sonata project org bundles media 2 2 doc reference usage html media new M
  • 切换按钮和开关的区别

    切换按钮和开关有什么区别 由于它们提供相同的功能 使用切换按钮或开关的具体用例是什么 切换按钮 Switch 这更多的是一个用户体验问题 而不仅仅是编码问题 这是我的回答 该控件的描述是这样说的 Toggle是一个按钮 sap m Togg
  • 为什么 go.mod 中的所有依赖都是间接的?

    我通过运行以下命令来初始化一个 go 项目 go mod init firstgo app 我确认模块已创建 cat go mod module firstgo app go 1 18 然后我通过执行安装了对 github com gin
  • 如何使用curses在终端中编写三行不断更新的行?

    我有一个程序需要输出三个不断变化的消息 连接数 已用时间和拒绝的连接 我尝试用以下方式写它们 r 在字符串末尾并在其他开始自己的输出循环之前打印换行符 认为回车符会返回一行 但它们最终都在第一行互相覆盖 我见过类似的问题 人们推荐使用cur