gpt4 book ai didi

java - jmx-term python 子进程毒害 shell

转载 作者:行者123 更新时间:2023-11-30 05:09:50 26 4
gpt4 key购买 nike

#!/usr/bin/env python

from subprocess import *

p = Popen(
args=("java","-jar","jmxterm-1.0-alpha-4-uber.jar"),
bufsize=0,
stdin=PIPE,
stderr=PIPE
)

p.stdin.write("open localhost:12345\n")
x = p.stderr.readline()

这需要一个 java 进程在端口 12345 上监听 jmx 客户端。脚本“works”: x 是正确的(当您打印它或在 pdb 中查看它时)。

那么问题是什么?当这个脚本终止时,shell 的行为很奇怪。在 Linux 和 OS-X 上,在 shell 中键入内容是不可见的(尽管输出可见),而在 Windows 上,每个命令键入的前两个字符将被忽略。执行终端“重置”命令似乎可以修复它,但我不想让我的脚本的用户遭受这种情况。

删除脚本的最后一行(访问 p.stderr.readline())可以消除问题,也可以消除脚本的实用程序。

我删除了身份验证以简化示例。您会注意到,我没有打印 x,以避免向 shell 写入一些令人讨厌的内容作为罪魁祸首。

版本:Snow Leopard 和各种 Linux 上的 CPython 2.7; Windows 7 上的 CPython 2.6.3

最佳答案

jmxterm 可能正在为终端上的交互式使用进行一些初始化,或者是因为错误,或者是因为您没有明确关闭它,所以它不会自行清理。避免这种情况的最简单方法可能是将其 STDOUT 也连接到 PIPE,就像对其他标准流所做的那样。

关于java - jmx-term python 子进程毒害 shell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3817544/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com