Python 运行守护进程子进程并读取标准输出

2024-04-07

我需要运行一个程序并将其输出收集到标准输出。该程序 (socat) 需要在 python 脚本运行期间在后台运行。 Socat 一旦运行就会处于守护进程模式,但首先它会将一些行输出到标准输出,我的脚本的其余部分需要这些行。

命令:socat -d -d PTY: PTY:

Output:

2011/03/23 21:12:35 socat[7476] N PTY is /dev/pts/1
2011/03/23 21:12:35 socat[7476] N PTY is /dev/pts/2
2011/03/23 21:12:35 socat[7476] N starting data transfer loop with FDs [3,3] and [5,5]

...

我基本上想在程序开始时运行它并让它运行直到脚本终止,但我需要将两个 /dev/pts/X 名称读入 python 中。

谁能告诉我该怎么做?

我想出了这个,它只是挂起,我猜是因为它阻止了子进程的终止。

#!/usr/bin/python
from subprocess import Popen, PIPE, STDOUT

cmd = 'socat -d -d PTY: PTY: &'

p = Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE, close_fds=True)
output = p.stdout.read()

# Process the output 
print(output)

谢谢你的帮助

编辑:似乎它可能会写入 stderr,但脚本仍然只是在有或没有 & 甚至从 stderr 读取的情况下挂起。


#!/usr/bin/python
from subprocess import Popen, PIPE
import pty
import os

cmd = 'socat -d -d PTY: PTY:'

master, slave = pty.openpty()

p = Popen(cmd, shell=True, stdin=PIPE, stdout=slave, stderr=slave, close_fds=True)
stdout = os.fdopen(master)
print stdout.readline()
print stdout.readline()

你的版本有两个问题。首先,您调用 read 时不带参数,这意味着它将尝试读取所有内容。但由于 socat 不会终止,因此它永远不会决定它已读取所有内容。通过使用 readline,python 只会读取直到找到换行符。根据我对你问题的理解,这就是你所需要的。

第二个问题是 C 标准库将缓冲管道上的输出。我们通过使用 openpty() 函数创建一个 pty 并将其传递给子进程的 stdout 和 stderr 来解决这个问题。我们使用 fdopen 将该文件描述符变成常规的 python 对象,并摆脱缓冲。

我不知道你用 socat 做什么,但我想知道是否可以使用 pty 模块来替换它。您正在将一个 pty 复制到另一个 pty,并且 openpty 正在创建一对 pty。也许你可以直接使用它们?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 运行守护进程子进程并读取标准输出 的相关文章

随机推荐

  • Flutter实现重复弹性动画

    为了实现这个动画 我写了下面的代码 但是 弹性动画在项目中不起作用 我不确定有什么问题 我想重复这个动画 import package flutter material dart void main gt runApp MaterialAp
  • 为什么 nhibernate 需要 Log4Net?

    我将使用 asp net mvc3 和 nhibernate 3 2 构建我的应用程序 我决定使用 Elmah 记录所有错误消息 我记得 nhibernate 支持 log4net 并用它来记录所有查询 如果我不关心将查询输出到日志文件 我
  • 将参数传递给 pentaho CDE 报告

    我在此报告中创建了一个 CDE 参数报告 我想通过 url 传递参数 我的 CDE 报告链接如下 http localhost 8080 pentaho content pentaho cdf dd Render solution demo
  • 如何从该函数中获取函数名称?

    如何从函数内部访问函数名称 parasitic inheritance var ns parent child function var parent new ns parent parent newFunc function return
  • 如何使用 afconvert 将 .caf 转换为 .mp3 格式? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在使用 afconvert 命令行实用程序来转换音频文件 caf to mp3格式 我用过afconvert afconvert f
  • Android 帐户验证器编辑电子邮件 ID 凭据

    当我登录时 电子邮件受保护 cdn cgi l email protection在我的应用程序中 它使用我的电子邮件成功生成帐户 如下所示 现在我注销并使用不同的电子邮件登录 例如 电子邮件受保护 cdn cgi l email prote
  • 在 bash 中对退出代码进行 AND 运算

    我有一个 bash 脚本 它对我的 源代码运行三项检查 然后exit 0如果所有命令都成功 或者exit 1如果其中任何一个失败 bin bash test1 src test 1 option exit 1 test2 src test
  • Shell_NotifyIconA / Shell_NotifyIconW ...有什么区别?

    我正在将一些 Win32 代码移植到 C 并且遇到了几个具有相同名称并使用相同结构的函数 只是它们以 A 和 W 结尾 例如 return MarshalAs UnmanagedType Bool DllImport shell32 dll
  • 嵌套类定义在外部类之外,而外部类包含内部类的实例

    C 如何将内部 嵌套 类的定义放在其外部 封闭 类的定义之外 其中外部类至少有一个内部类实例作为数据成员 我搜索了但我找到的最相关的答案 源文件中的嵌套类定义 https stackoverflow com questions 448200
  • 我的应用程序由于 Android 上的权限问题而终止

    我正在编写这段代码来获取 GPS 位置 我已经 在 Android 属性上标记了 ACCESS COARSE LOCATION 和 ACCESS FINE LOCATION 我还确认了它是否在 AndroidManifest xml 中 但
  • 关闭键盘 - iOS 7 中的多个 UITextField

    下面您将找到我的主视图控制器的 h 和 m 文件 我有 3 个问题 1 因为我有多个 uitextfields 我是否必须为每个字段设置自己的 resignFirstResponder 语句 2 我会在哪里 用什么方法做到这一点 3 我辞去
  • UIButton 第一次点击后不可点击

    我试图在单击按钮时从底部引入一个子视图 但只有第一次该按钮是可点击的 动画按钮后第二次单击不可单击 这是代码 class AnimateView UIView var button UIButton var menuView UIView
  • 我在Excel中有3个时间段 - 我需要知道最长连续时间段的持续时间

    请帮忙 理想情况下 我真的很想仅使用公式来解决这个问题 而不是 VBA 或任何我认为 花哨 的东西 我所工作的项目为持续参与提供奖金 我们有三个 有时更多 参与时间段 这些时间段可能会重叠和 或可能有没有参与的空间 神奇的数字是 84 天的
  • 如何在另一个线程中设置文本视图的文本

    我试图在另一个线程 即子线程 中设置文本 但对于以下代码 它给出了错误 只有创建视图层次结构的原始线程才能触摸其视图 public void onCreate Bundle savedInstanceState super onCreate
  • 为什么 eclipse 无法正确部署我的动态 Web 项目?

    问题是 我在源代码控制下有一个 java 动态 Web 项目 并在我的 Eclipse 工作区中检出 之前 我能够从 eclipse 中在本地 Tomcat 服务器上运行 servlet 但是 我进行了一些更改 删除了一些文件并添加了一些新
  • 如何在 JavaScript 中旋转图像?

    我想在单击打开按钮时旋转风扇图像 单击关闭按钮 旋转停止 我的代码是 img src fan png width 200 br
  • Android 支持库 ActionBar NullPointerException 版本 2.2(级别 8) - 与preferences.xml冲突

    我正在使用 v7 支持库在 Android 2 x 上显示 ActionBar 当我将应用程序部署到 IDE Intellij IDEA 中的设备时 应用程序运行正常 当我使用 maven 构建并打包要部署到 Play 商店的应用程序时 我
  • 在 IPython Notebook 之间共享数据

    如果我有多个 IPython 笔记本在同一台服务器上运行 有什么办法可以在它们之间共享数据吗 例如 从另一个笔记本导入变量 谢谢 这对我有用 store 命令允许您在两个不同的之间传递变量 笔记本 data 这是我想要传递到不同笔记本的字符
  • DateTimePicker 控件不显示 AM/PM

    我在使用自定义格式 其中包括两个字母的 A M P M 的 DateTimePicker 控件时遇到问题 缩写 使用 en US CultureInfo DateTimeFormat ShortTimePattern 会导致 时 嗯tt 但
  • Python 运行守护进程子进程并读取标准输出

    我需要运行一个程序并将其输出收集到标准输出 该程序 socat 需要在 python 脚本运行期间在后台运行 Socat 一旦运行就会处于守护进程模式 但首先它会将一些行输出到标准输出 我的脚本的其余部分需要这些行 命令 socat d d