如何在 PyCharm IDE 中使用子进程模块调用基于 ncurses 的应用程序?

2024-04-23

我想使用 subprocess 模块从 python 启动一个基于 ncurses 的应用程序。

基于 ncurses 的应用程序是 TABARI,一个事件提取系统。事件提取的结果保存到文件中。我想从 python 脚本启动它,等待它终止,然后读取结果文件。

代码示例如下所示:

import subprocess
proc = subprocess.Popen('TABARI -a ' + file, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
print proc.communicate()

这段代码在PyCharm中运行程序时的结果是:

('', 'Error opening terminal: unknown.\n')

当我从终端启动的 python 解释器运行相同的代码(与 PyCharm 中使用的相同)时,输出为:

('...lots of text...', '')

我尝试了几件事,包括使用 shell=False、将 bufsize 设置为 -1 以及调查 os.environ 变量。 PyCharm 和终端的 os.environ 输出之间的一个可疑区别是“TERM”变量,该变量在 PyCharm 中不存在,等于终端中的“xterm”。

我将不胜感激任何帮助。


我具体不了解 PyCharm 或 TABARI,但从错误消息来看,听起来 PyCharm 正在执行您的代码,而无需将其连接到终端。可能它这样做是为了收集程序输出并将其显示在 GUI 窗口中,或者因为作者认为启动像 xterm 这样的终端模拟器并在其中运行代码不太干净。

从这里的一些其他问题来看,似乎没有任何真正好的方法可以让 PyC​​harm 在运行代码时提供终端仿真环境。有一些建议关于这个问题 https://stackoverflow.com/questions/17008372/pycharm-how-to-launch-for-a-standard-terminal-to-solve-an-issue-with-curses,但听起来不太令人满意。

阻力最小的方法可能就是每次从终端运行程序。如果这是不可接受的,您可以检查代码以查看 stdin 是否是终端(os.isatty(0)),如果没有,请显式启动一个终端模拟器(例如 xterm)并在其下重新调用您的代码。或者,如果您实际上不需要在子进程运行时与其交互,您可以分配自己的伪终端主/从对并运行连接到从属的代码。这些事情都比它们应该的更复杂,所有这些的完整解释需要足够的文字来填写整个手册,但这里有一些很好的资源:

  • 伪终端的维基百科条目 http://en.wikipedia.org/wiki/Pseudo_terminal,对于一些非常一般的背景
  • xterm(1) 的手册页 http://linux.die.net/man/1/xterm,了解如何使用特定命令而不是 shell 启动的信息
  • pty(7) 的手册页 http://man7.org/linux/man-pages/man7/pty.7.html- 解释与 pty/tty 设备交互的机制
  • Python pty 模块 https://docs.python.org/2/library/pty.html,如果您想创建一个伪终端主/从对并通过普通 Python 与其交互
  • 来自旧版 Linux 内核手册的解释 http://www.win.tue.nl/~aeb/linux/lk/lk-10.html关于进程组和会话如何与终端所有权相关
  • UNIX® 环境中的高级编程:第二版的摘录 作者:W.理查德·史蒂文斯、斯蒂芬·A·拉戈 http://infohost.nmt.edu/~eweiss/222_book/222_book/0201433079/ch09lev1sec6.html有关终端控制的更多信息
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 PyCharm IDE 中使用子进程模块调用基于 ncurses 的应用程序? 的相关文章

  • 自 1.4.0 版本以来,sphinx_rtd_theme 不再是硬依赖项

    C Users Administrator Desktop item code serv documents api gt 制作 html 运行 Sphinx v1 6 2 加载腌制环境 失败 无法获取属性 WarningStream
  • 在Python子目录中创建文件?

    在我的 Python 脚本中 我需要在子目录中创建一个新文件而不更改目录 并且需要从当前目录不断编辑该文件 My code os mkdir datetime dst for ip in open list txt with open ip
  • Django:如何从管理界面调用管理自定义命令执行?

    参考 从代码执行管理命令 https stackoverflow com questions 907506 how can i call a custom django manage py command directly from a t
  • chrome_options.binary_location() TypeError: 'str' 对象不可调用

    我希望每个人都好 我是 python 新手 我尝试运行这段代码 但我不明白问题是什么以及如何解决这个问题 我的代码是 from selenium import webdriver from time import sleep url raw
  • 在heroku实例上安装PIL

    我创建了一个python flask托管在heroku上的应用程序 我很有趣PILpython 中的图像库 我无法安装PIL在heroku实例中 我尝试过以下几种方法 方法一 Added PIL 1 1 7 in requirements
  • Pytorch“展开”等价于 Tensorflow [重复]

    这个问题在这里已经有答案了 假设我有大小为 50 50 的灰度图像 在本例中批量大小为 2 并且我使用 Pytorch Unfold 函数 如下所示 import numpy as np from torch import nn from
  • 将 unique_ptr 与 boost python 结合使用 - boost::shared_ptr 有效,但 unique_ptr 无效

    这可能与以下问题相同 Boost Python 没有 to python for std unique ptr https stackoverflow com questions 20590205 boost python no to py
  • 登录 python + mod_wsgi 应用程序

    我在 apache 服务器上部署了一个 python Flask 应用程序 这是我的abc conf file WSGIDaemonProcess voting app threads 5 WSGIScriptAlias election
  • 读取 JSON 文件并将其漂亮打印到另一个文件

    我有一个复杂 嵌套 的 json 文本文件 它是文本文件中的一长行 有什么方法可以读取文件 在 python 中 并将 json 缩进 漂亮地打印到新的文本文件中吗 使用读取文件json load 并使用json dump 在指定缩进值时将
  • Python 有哪些 SOAP 客户端库,它们的文档在哪里? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 向 list.extend() 传递不可迭代对象

    我正在创建一个公共方法来允许调用者将值写入设备 例如将其称为 write vals 由于这些值将实时输入 因此我希望通过允许用户输入列表或单个值来简化用户的生活 具体取决于他们需要写入的值的数量 例如 write to device 1 2
  • 无法写入文本文件

    我正在运行一些测试并需要写入文件 当我运行测试时open file r 不写入文件 测试脚本如下 class GetDetailsIP TestGet def runTest self self category PTZ try This
  • 如何开始使用“scipy”

    我之前安装过 Python 3 4 2 和 3 5 2 在这两种情况下 我都可以在 Idle 中涉足编写和测试代码 这给了我两个窗口 一个用于代码的 运行 窗口 一个用于交互和测试的 Shell 窗口 输出 抱歉 不确定术语是否正确 现在我
  • 当有效的 django 表单保存在数据库中时如何触发自定义 python 代码

    Django 新手 我创建了一个简单的表单如下this https www youtube com watch v 3XOS UpJirU教程 我的表单正确地将数据保存在我的 Postgres 连接的本地数据库中 我想知道 每当将有效表单保
  • 第 100 次避免循环导入

    Summary 我继续有一个ImportError在一个复杂的项目中 我已经将其蒸馏到仍然会出现错误的最低限度 Example 巫师有装有绿色和棕色药水的容器 这些可以添加在一起 产生同样是绿色或棕色的新药水 我们有一个PotionABC
  • 在 matplotlib 中添加新的导航模式

    我正在编写一个 wx matplotlib 应用程序 并且在向 matplotlib 导航工具栏添加新工具时遇到相当大的困难 基本上我想添加选择工具 选取框 套索等 以切换受控子图的鼠标模式 到目前为止 我还没有找到任何功能可以让我轻松地做
  • 在 python 中将数组作为参数传递

    我是Python新手 现在我需要声明大小为 20 的数组并将该数组传递给函数 需要数组的函数如下 function args The args是一个输入function 谁能帮我 如何在 python 中传递数组 当你说 数组 时 我假设你
  • 是否可以使用 Google BERT 来计算两个文本文档之间的相似度?

    是否可以使用 Google BERT 来计算两个文本文档之间的相似度 据我了解 BERT 的输入应该是有限大小的句子 一些作品使用 BERT 来计算句子的相似度 例如 https github com AndriyMulyar semant
  • 设置restrict_xpaths设置后出现UnicodeEncodeError

    我是 python 和 scrapy 的新手 将restrict xpaths 设置设置为 table class lista 后 我收到了以下回溯 奇怪的是 通过使用其他 xpath 规则 爬虫可以正常工作 Traceback most
  • Python二进制数据读取

    urllib2 请求接收二进制响应 如下所示 00 00 00 01 00 04 41 4D 54 44 00 00 00 00 02 41 97 33 33 41 99 5C 29 41 90 3D 71 41 91 D7 0A 47 0

随机推荐