python - 如何将 Python 循环处理信息回显到命令行?
问题描述
我正在尝试设置一个(铁)python 脚本,该脚本向命令行显示一些处理信息。就像是:
list = ["a", "b", "c"]
for i in list:
cmd /k echo str(list.index(i)) #just echo index and leave window open so user can see progression
挑战是将多个回显命令发送到命令行的同一实例。
注意:我不能只print(i)
在这种情况下使用,因为这个 ironpython 脚本将在一个可视化编程应用程序中运行,它不允许打印到命令行。该脚本的目标是用户可以在繁重的操作期间看到进度。
我遇到了多个建议为此使用子进程的线程。我已经看过并测试了很多示例,但我无法让它们中的任何一个起作用。我真的可以使用一些帮助。
例如,当我这样做时......
import subprocess
proc=subprocess.Popen("echo hello world", shell=True, stdout=subprocess.PIPE)
.... 然后我可以看到正在返回“hello world”,所以 echo 可能是成功的。但我从来没有看到一个shell窗口弹出。
编辑 1
更多测试结果:方法1给了我一个很好的结果(命令被执行并且屏幕保持打开以供阅读);方法 2:添加标准输出会打开外壳并保持屏幕打开但没有可见的结果 - 没有什么可读取的;方法3:添加stdin会闪屏(过早关闭)
方法一:
process = Popen("cmd /k dir")
方法2:
process = Popen("cmd /k dir",stdout=subprocess.PIPE)
方法3:
process = Popen('cmd /k dir',stdin=subprocess.PIPE)
编辑 2
方法 4 - 创建两个单独的 cmd 窗口,一个显示 a,一个显示 b。不是。
process = Popen("cmd /k echo a")
process = Popen("cmd /k echo b")
方法 5 - 在 stdin 之后添加 process.stdin.write - 只是闪烁
process = Popen('cmd /k echo a',stdin=subprocess.PIPE)
process.stdin.write("cmd /k echo b")
我正在寻找的东西似乎很简单,但它让我头疼......
解决方案
你想做的事情并不像你想象的那么简单。因为 CMD 窗口与 IronPython 脚本的进程不同,所以要执行任何交互操作(例如显示脚本的进度),您需要使用某种形式的进程间通信。
例如,您可以编写一个在 CMD 窗口中运行的服务器脚本,然后从 IronPython 脚本向它发送消息。但是接下来您必须担心如何启动服务器、如何停止它以及如何与 IronPython 客户端脚本同步。您可以在此 StackOverflow 答案中看到这种进程间通信的示例。
在尝试这样的事情之前,我会确保没有办法在你的可视化编程应用程序中显示进度,因为留在同一个过程中可能会更容易。
推荐阅读
- nao-robot - 如何在 NAO V6(嵌入式)中安装 Python3?
- c++ - 从其他 C++ 源调用函数不起作用
- html - 使用 html 和 Flask 的依赖下拉菜单
- python - 如何在自定义数据集上训练 GluonCV 的 Faster RCNN?
- java - Java使用Java反射更改类文件名
- windows - 我应该使用哪个 Chrome 的句柄来获取 Internet 中的特定图像?
- google-sheets - 谷歌表格错误?查询完成但输出为空
- c# - 如何设计嵌套查询以使用实体框架从 MS SQL 表中获取数据?
- alloy - 在合金中显示反例
- qt - qt在按下按钮时检测鼠标点击持续时间