如何在 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 的应用程序? 的相关文章

  • Python - 比较同一字典中的值

    我有一本字典 d Trump MAGA FollowTheMoney Clinton dems Clinton Stein FollowTheMoney Atlanta 我想删除字符串列表中的重复字符串 该字符串是键的值 对于这个例子 期望
  • matplotlib 图中点的标签

    所以这是一个关于已发布的解决方案的问题 我试图在我拥有的 matplotlib 散点图中的点上放置一些数据标签 我试图在这里模仿解决方案 是否有与 MATLAB 的 datacursormode 等效的 matplotlib https s
  • NLTK 2.0分类器批量分类器方法

    当我运行此代码时 它会抛出一个错误 我认为这是由于 NLTK 3 0 中不存在batch classify 方法 我很好奇如何解决旧版本中的某些内容在新版本中消失的此类问题 def accuracy classifier gold resu
  • 嵌套列表的重叠会产生不必要的间隙

    我有一个包含三个列表的嵌套 这些列表由 for 循环填充 并且填充由 if 条件控制 第一次迭代后 它可能类似于以下示例 a 1 2 0 0 0 0 0 0 4 5 0 0 0 0 0 0 6 7 根据条件 它们不重叠 在第二次迭代之后 新
  • 如何从Python中的函数返回多个值? [复制]

    这个问题在这里已经有答案了 如何从Python中的函数返回多个变量 您可以用逗号分隔要返回的值 def get name you code return first name last name 逗号表示它是一个元组 因此您可以用括号将值括
  • 更好地相当于这个疯狂的嵌套 python for 循环

    for a in map for b in map a for c in map b for d in map c for e in map d print a b c d e 上面的代码用于创建图中一定长度的所有路径 map a 表示从
  • PyQt 使用 ctrl+Enter 触发按钮

    我正在尝试在我的应用程序中触发 确定 按钮 我当前尝试的代码是这样的 self okPushButton setShortcut ctrl Enter 然而 它不起作用 这是有道理的 我尝试查找一些按键序列here http ftp ics
  • 打印数字时添加千位分隔符[重复]

    这个问题在这里已经有答案了 我真的不知道这个问题的 名称 所以它可能是一个不正确的标题 但问题很简单 如果我有一个数字 例如 number 23543 second 68471243 我想要它使print 像这样 23 54368 471
  • 从 Powershell 脚本安装 Python

    当以管理员身份从 PowerShell 命令行运行以下命令时 可以在 Windows 11 上成功安装 Python c temp python 3 11 4 amd64 exe quiet InstallAllUsers 0 Instal
  • Python 3:将字符串转换为变量[重复]

    这个问题在这里已经有答案了 我正在从 txt 文件读取文本 并且需要使用我读取的数据之一作为类实例的变量 class Sports def init self players 0 location name self players pla
  • pandas - 包含时间序列数据的堆积条形图

    我正在尝试使用时间序列数据在 pandas 中创建堆积条形图 DATE TYPE VOL 0 2010 01 01 Heavy 932 612903 1 2010 01 01 Light 370 612903 2 2010 01 01 Me
  • Python GTK+ 画布

    我目前正在通过 PyGobject 学习 GTK 需要画布之类的东西 我已经搜索了文档 发现两个小部件似乎可以完成这项工作 GtkDrawingArea 和 GtkLayout 我需要一些基本函数 如 fillrect 或 drawline
  • Protobuf 如何编码 oneof 消息结构

    对于这个 python 程序 在编码时运行 protobuf 编码会给出以下输出 0a 10 08 7f8a 0104 08 02 10 0392 0104 08 02 10 03 18 01 我不明白的是为什么8a后面有一个01 为什么9
  • 带有 LSTM 的 GridSearchCV/RandomizedSearchCV

    我一直在尝试通过 RandomizedSearchCV 调整 LSTM 的超参数 我的代码如下 X train X train reshape X train shape 0 1 X train shape 1 X test X test
  • 如果 PyPy 快 6.3 倍,为什么我不应该使用 PyPy 而不是 CPython?

    我已经听到很多关于PyPy http en wikipedia org wiki PyPy项目 他们声称它比现有技术快 6 3 倍CPython http en wikipedia org wiki CPython口译员开启他们的网站 ht
  • Firebase Firestore:获取文档的生成 ID (Python)

    我可以创建一个新文档 带有自动生成的 ID 并存储对其的引用 如下所示 my data key value doc ref db collection u campaigns add my data 我可以像这样访问数据本身 print d
  • pandas.read_csv 将列名移动一倍

    我正在使用位于的 ALL zip 文件here http www fec gov disclosurep PDownload do 我的目标是用它创建一个 pandas DataFrame 但是 如果我跑 data pd read csv
  • 如何在 Flask 中的视图函数/会话之间传递复杂对象

    我正在编写一个 Web 应用程序 当 且仅当 用户登录时 该应用程序从第三方服务器接收大量数据 这些数据被解析为自定义对象并存储在list 现在 用户在应用程序中使用这些数据 调用不同的视图 例如发送不同的请求 我不确定什么是最好的模式在视
  • NLTK:查找单词大小为 2k 的上下文

    我有一个语料库 我有一个词 对于语料库中该单词的每次出现 我想获取一个包含该单词之前的 k 个单词和该单词之后的 k 个单词的列表 我在算法上做得很好 见下文 但我想知道 NLTK 是否提供了一些我错过的功能来满足我的需求 def size
  • 如何在Python脚本中从youtube-dl中提取文件大小?

    我是 python 编程新手 我想在下载之前提取视频 音频大小 任何 YouTube 视频 gt gt gt from youtube dl import YoutubeDL gt gt gt url https www youtube c

随机推荐