清空python交互历史命令_Python 与命令行交互

27928a9607bff13e4904c1146e57f917.gif

Python 子流程模块是一个功能强大的库,用于启动和与子流程交互。它附带了一些高级 api,比如调用、检查输出和(从 Python 3.7开始)运行,这些都集中在的程序运行和等待完成的子进程上。

在这篇文章中,想讨论这个任务的一个变体,它不太直接涉及一个长时间运行的子进程。考虑测试一些服务器——例如 HTTP 服务器。将它作为一个子进程启动,然后将客户机连接到它,并运行一些测试序列。当完成后,希望以一种有序的方式关闭儿童程序。这对于同步运行子进程的 api 来说是很难实现的,因此必须查看一些较低级别的 api。

最近做的项目安卓 shell 里面有些就需要这个。

当然,可以使用 subprocess.run在一个线程中启动一个子进程,并在另一个线程中与其交互(例如,通过一个已知的端口, 比如HTTPServer)。但是,当完成了子进程之后,要完全终止它将变得非常棘手。如果子进程有一个有序的终止序列(比如发送某种“退出”命令) ,那么这是可行的。但是大多数服务器不这样做,只会永远旋转直到死亡。这就是这篇文章所讨论的用例。

启动,交互,终止,并获得所有输出时完成

第一个最简单的用例是启动一个 HTTP 服务器,与它交互,干净利落地终止它,并在完成后获取所有服务器的 stdout 和 stderr。下面是这些代码的重要部分(本文的所有代码示例都可以在这里找到) ,用 Python 3.6进行了测试:

defmain():proc=subprocess.Popen(['python3','-u','-m','http.server','8070'],stdout=subprocess.PIPE,stderr=subprocess.STDOUT)try:time.sleep(0.2)resp=urllib.request.urlopen('http://localhost:8070')assertb'Directory listing'inresp.read()finally:proc.terminate()try:outs,_=proc.communicate(timeout=0.2)p

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现一个有交互界面的学分统计系统可以使用 Python 的 GUI 库 tkinter,以下是一个简单的示例代码: ```python import tkinter as tk class CreditCalculator(tk.Frame): def __init__(self, master=None): super().__init__(master) self.master = master self.pack() self.create_widgets() def create_widgets(self): # 创建标签和输入框 self.course_label = tk.Label(self, text="课程名:") self.course_label.pack() self.course_entry = tk.Entry(self) self.course_entry.pack() self.credit_label = tk.Label(self, text="学分:") self.credit_label.pack() self.credit_entry = tk.Entry(self) self.credit_entry.pack() self.grade_label = tk.Label(self, text="成绩:") self.grade_label.pack() self.grade_entry = tk.Entry(self) self.grade_entry.pack() # 创建添加按钮 self.add_button = tk.Button(self, text="添加", command=self.add_course) self.add_button.pack() # 创建统计按钮 self.calculate_button = tk.Button(self, text="计算总学分和平均成绩", command=self.calculate) self.calculate_button.pack() # 创建输出框 self.output_text = tk.Text(self, height=10, width=30) self.output_text.pack() # 初始化变量 self.courses = [] self.total_credit = 0 self.total_grade = 0 def add_course(self): # 获取输入的数据 course_name = self.course_entry.get() credit = float(self.credit_entry.get()) grade = float(self.grade_entry.get()) # 添加到列表 self.courses.append((course_name, credit, grade)) # 清空输入框 self.course_entry.delete(0, tk.END) self.credit_entry.delete(0, tk.END) self.grade_entry.delete(0, tk.END) def calculate(self): # 计算总学分和平均成绩 self.total_credit = sum(course[1] for course in self.courses) self.total_grade = sum(course[1] * course[2] for course in self.courses) / self.total_credit # 输出结果 self.output_text.delete(1.0, tk.END) self.output_text.insert(tk.END, f"总学分: {self.total_credit:.1f}\n") self.output_text.insert(tk.END, f"平均成绩: {self.total_grade:.1f}\n") if __name__ == "__main__": root = tk.Tk() app = CreditCalculator(master=root) app.mainloop() ``` 运行代码后会出现一个窗口,可以输入课程名、学分和成绩,点击添加按钮将数据添加到列表中,点击计算按钮将统计结果输出到输出框中。 需要注意的是,这只是一个简单的示例,实际应用中需要根据具体需求进行修改和完善。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值