#!/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上,每个命令键入的前两个字符将被忽略。执行终端“reset”命令似乎可以修复它,但我不想把它强加给脚本的用户。
删除脚本的最后一行(访问p.stderr.readline())可以消除此问题,但也可以消除脚本的实用程序。
我删除了身份验证以简化示例。你会注意到,我不打印X,以消除写一些讨厌的东西外壳作为罪魁祸首。
版本:cpython 2.7在雪豹和各种Linux上;cpython 2.6.3在Windows 7上