我可以在用户中间暂停正在运行的python脚本(在Windows下),并在用户决定时再次恢复吗?

有一个主管理器程序生成,加载和运行其他python脚本(通过从控制台调用python script.py)。我没有GUI,用户可以通过console进行交互。我希望我的主程序能够响应用户 正在运行的脚本的暂停/恢复命令。我应该定义一个线程吗? 方法是什么?

编辑/更新:

假设我有一个带有前端的小型python应用程序,它具有各种功能。 我有一个RUN命令在后台运行python脚本。我想实现一个暂停正在运行的python脚本的PAUSE功能。 当用户再次命令RUN时,python脚本应该恢复

跑步。

使用raw_input()或print()强制用户发出命令。但在这种情况下,我们不知道用户何时想要中断/暂停/发出命令。因此通常的输入/打印不可用。

你问了七个问题,只接受了一个答案。 请记住通过单击最有用的旁边的复选标记来接受您的问题的答案。 你应该为旧的,已回答的问题以及这个问题做到这一点。

我不能只选择一个答案。我并不是说不喜欢花时间帮助我的人。

这不是很清楚,但你让我很感兴趣。 Lemme看看我是否能解决这个问题:你有一个管理一系列外部python脚本的控制台程序,你想制作一组暂停和恢复脚本的命令。 我认为最好的方法是将这些脚本设置为生成器,因此它们会定期回退到管理器程序,然后可以查找用户命令,然后告诉脚本继续,假设用户没有暂停脚本。

不完全是,我在我的问题中添加了一个描述..

如果它是unix我会推荐信号,但这里有一个粗略的版本可以满足您的要求。

import time

while True:

try:

time.sleep(1)  # do something here

print '.',

except KeyboardInterrupt:

print '

Pausing...  (Hit ENTER to continue, type quit to exit.)'

try:

response = raw_input()

if response == 'quit':

break

print 'Resuming...'

except KeyboardInterrupt:

print 'Resuming...'

continue

使用Ctrl + C暂停,然后按ENTER继续。 Ctrl + Break可能会被用作严厉杀戮,但我没有这个键盘上的键。

更强大的版本可以在管道/套接字甚至线程上使用select。

+1。看起来有点hacky,但我认为更接近要求而不是我的要求。

是的,hacky但是完整的解决方案超出了我收集的SO问题的范围。

如果不是time.sleep()我有一个冗长的python脚本,我不能使用这个技巧,因为每次我们恢复它从开始运行整个脚本。它不会暂停状态存储..

使用子进程运行它,然后使用stackoverflow.com/questions/1892356/暂停和恢复进程

您可以通过创建PAUSEFILE来进行简单的解决方法。您的待暂停脚本可能会定期检查此类文件的存在(或内容)。

用户的PAUSE命令可以创建(或填充适当的内容)此类文件。

我在类似的情况下使用过这种方法,我希望能够暂停我的Python脚本并在以后恢复它们。它们包含类似的东西

if os.path.isfile(PAUSEFILE):

raw_input('Remove ' + PAUSEFILE + ' and hit ENTER to continue')

在他们的主循环中。

它是讨厌的,如果代码真的依赖于它可能会被破坏,但对于用例,用户随机暂停,我想这无关紧要。

PAUSE命令只是touch $PAUSEFILE。

这不是花哨的,但它是一种简单的方法来执行相当于低优先级的中断。我希望我的脚本只在循环内的代码块结束时暂停(运行几个小时),这是一种简单的方法。

我不太了解你的方法,但每次用户需要按Enter键继续你应该使用的脚本:

input() #for python 3k

raw_input() #for python 2k

没有将接收答案分配给变量。

请看我的更新。

好吧,你说用户只使用控制台进行交互,所以从那时起输入的唯一方法是从input和raw_input到较低级别的stdin。如果您在tkinter中创建了一个gui应用程序,例如您可以从鼠标手势,键盘按下等输入。

是的,但问题不在于如何获得输入。如何将强制输入链接到暂停和恢复。我不要求在我的代码中输入。我希望代码对中断采取行动并将其视为暂停和恢复。

我喜欢这个答案:简单,有效。我在Python 3.5脚本中使用了它:输入(" n t n n t t t t t t t t t t t t t t t t t t t t t t t n> n n n按Enter继续 n

好吧,从我在搜索中看到的情况来看,即使使用线程,sys.stdin也会对你起作用,无论你怎么做(input(),甚至sys.stdin.read(),。readline()等等),因为他们阻止。

相反,将您的经理程序编写为套接字服务器或类似的东西。

将脚本编写为生成器,设计用于暂停执行(每次命中yield),并依次在每个脚本上依次调用next()。脚本完成时,您将收到StopIteration异常。

为了处理这些命令,编写一个连接到管理器程序套接字并向其发送消息的第二个脚本,这将是用户与之交互的控制台界面(稍后,您甚至可以将其升级到GUI而不会在其他地方进行更改)。

服务器在脚本上运行下一次迭代之前选择这些命令,如果用户暂停脚本,则管理器程序只是不会在该脚本上调用next(),直到用户告诉它再次运行。

我没有对此进行测试,但我认为它比为外部脚本创建线程或子进程更好,然后尝试暂停(以后再杀死)它们。

这真的是我的深度,但也许在后台运行脚本并使用kill -stop和kill -cont暂停和继续将工作(假设Linux)?

逻辑似乎很好,我不确定这是否可行和足够快。我的脚本调用自定义库函数,我不能使它们成为生成器,它们是非常冗长的函数...

嗯。然后你可能会遇到线程。生成器是Python可以暂停执行的唯一代码对象,假设您可以暂停它们,只留下子进程。

真棒!但是,我没有使用生成器,kill -stop job_id和kill -cont job_id完美地工作。

您可以在python中使用Pdb模块。

虽然它是一个调试器,但在你的情况下它可以帮助你传递并继续在代码中有断点的地方。

此外,当你恢复时,你可以看到它被暂停的位置以及变量的值是什么等。这将非常有帮助。

python调试器 - pdb

在Windows中,您可以暂停/恢复运行Python脚本。在CMD上或通过运行命令(Windows + R)键入resmon。找到您的Python脚本进程,然后右键单击> Suspend Process。这将解锁CPU使用率,但不能解锁RAM。 ;)

我觉得这些反应太过苛刻了,同时也很有趣。

最好的方法是使用KeyboardInterrupt异常进行https://stackoverflow.com/a/7184165/2480481。

正如我注意到没有人提到"使用调试器",我会这样做。

使用pip install pdb安装pdb,Python调试器。

按照这一点,通过Ctrl + c使您的脚本可以使用https://stackoverflow.com/a/39478157/2480481而不是退出它。

使用调试器(pdb)的主要好处是可以检查变量,值等。这远比暂停/继续它更强大。

此外,您可以添加带有pdb的Ipython接口,以便在崩溃时调试您的应用程序。请看:https://stackoverflow.com/a/14881323/2480481

如果从windows命令窗口启动python脚本,则可以使用msvcrt.kbhit()作为非阻塞按键检查,如下所示:

http://code.activestate.com/recipes/197140-key-press-detection-for-windows-text-only-console-/

kbhit()在Windows上"仅"出现。如果您在Linux上安装它,它将从_kbhit加载termios时崩溃。如果您使用timeout (0)和getch()函数来检测按键,它会更有用。我可能错了,但是我在玩一些东西时就看到了。看看viget.com/articles/然后是pastebin.com/1VRdFdPQ,最后是pastebin.com/xyfm7LNa,这是我最后做的工作。你可以看到我在那个教程中找到相关问题的所有内容:gist.github.com/reagent/9743630。

您是否尝试过显而易见的打印提示然后从标准输入读取一行?这将暂停你的整个脚本。

你在原始问题中提到的内容不是很清楚,所以如果这不符合你的要求,你能解释一下原因吗?

请看我的updarte。

python暂停和恢复游戏,暂停/恢复中间的python脚本相关推荐

  1. python设计拼图小游戏_教你用Python自制拼图小游戏,轻松搞定熊孩子

    摘要:本文主要为大家详细介绍了python实现拼图小游戏,文中还有示例代码介绍,感兴趣的小伙伴们可以参考一下. 开发工具 Python版本:3.6.4 相关模块: pygame模块: 以及一些Pyth ...

  2. python人工智能计算器_python游戏dnf_招募:基于python的召唤师全时段全技能(含均值AI)计算器全程测试......

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 √ 功能简介 借助Python跨平台.轻量化的优点,解决常规excel无法完成的准确AI.速度量化.CD量化.前后摇量化的问题,制作可以自动最优选择技能连 ...

  3. 乐学python编程做个游戏很简单_乐学Python编程-做个游戏很简单

    Python简单易学又功能强大,而且免费开源,在国内外的很多公司得到了广泛的应用.在科学计算.游戏.图像.人工智能.机器人.教育教学和航天飞机控制等很多领域,Python也是非常重要的编程工具. 本书 ...

  4. 用python编写猜成语游戏_10分钟学会用python写游戏!Python其实很简单!

    安装pygame 本人电脑是windows 10.python3.6,pygame下载地址:https://pypi.python.org/pypi/Pygame/1.9.3 请自行下载对应pytho ...

  5. python能做什么游戏ll-一个简单的python game游戏

    #!/usr/bin/env python #-*- coding:utf-8 -*-import pygame, sys, random # 滑雪人的不同状态图片文件 skier_images= [ ...

  6. 用python编写乒乓球小游戏--Turtle功能的应用

    用python编写乒乓球小游戏–Turtle功能的应用 python有很多功能强大的代码库,Turtle是一款用于游戏开发的代码库.通过编写乒乓球小游戏可以了解这个库的基本的代码的使用 先创建游戏的背 ...

  7. python小游戏扫雷怎么玩的技巧_用 Python 实现扫雷小游戏

    扫雷是一款益智类小游戏,最早于 1992 年由微软在 Windows 上发行,游戏适合于全年龄段,规则简单,即在最短的时间内找出所有非雷格子且在中间过程中不能踩到雷,踩到雷则失败,需重新开始. 本文我 ...

  8. python 课程设计扫雷报告_用 Python 实现扫雷小游戏

    扫雷是一款益智类小游戏,最早于 1992 年由微软在 Windows 上发行,游戏适合于全年龄段,规则简单,即在最短的时间内找出所有非雷格子且在中间过程中不能踩到雷,踩到雷则失败,需重新开始. 本文我 ...

  9. 用 Python 实现 扫雷小游戏

    源码在python学习交流q群:733089476 获取 扫雷是一款益智类小游戏,最早于 1992 年由微软在 Windows 上发行,游戏适合于全年龄段,规则简单,即在最短的时间内找出所有非雷格子且 ...

最新文章

  1. CSS浮动和清除浮动
  2. hdu 2896 病毒侵袭(AC自动机)
  3. Authentication和Authorization的区别
  4. nginx php pathinfo,Nginx解决PATH_INFO新解决办法
  5. python 修改列名_请教一个 Python 技巧(批量对 pandas.DataFrame()统一修改列名)
  6. java的dom4j怎么调_dom4j.jar 的调试方法
  7. 微信小程序 ---- 学习目标认识小程序
  8. 将input file的选择的文件清空的两种解决方案
  9. android 设置定位服务,Android 定位服务和位置权限
  10. 求 HCDA认证题库
  11. ArcGIS小图斑根据相邻地类属性融合。
  12. 关于使用 Connect-Busboy 实现文件上传 优化说明
  13. android tv 下载地址,Android TV获取所有的应用apk
  14. 鸿鹄元数正式加入openGauss社区
  15. Sage x3周期性凭证帮助企业提升财务效率
  16. 组合逻辑设计中的毛刺现象
  17. 第一章 阿里大数据产品体系
  18. 支付宝信用卡还款即将收费,3个方法免手续费!
  19. 2019年肖秀荣命题人讲真题上下两册【全】
  20. 精通 CSS+DIV 网页样式与布局 62

热门文章

  1. 计算机考试中英文打字题,五笔及中英文打字试题()含答案.doc
  2. 第三单元分支结构程序设计总结与感想
  3. 小苏的Shell编程笔记之四--条件测试
  4. 深度学习总结——思维导图
  5. Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.
  6. 智能网关与服务器连接简介
  7. TortoiseGit安装与配置
  8. blktrace,blkparse,btt工具的制作和使用
  9. 【6月比赛合集】103场可报名的数据挖掘大奖赛,任君挑选!
  10. KYC 对 Voice 究竟有多重要?