使用python子进程运行另一个包含os.ctermid()的python脚本

使用python子进程运行另一个包含os.ctermid()的python脚本,python,subprocess,Python,Subprocess,我编写了一个小python脚本,它运行另一个python脚本,并对其输出进行一些基本处理。然后,它将此输出用作sublime文本插件的一部分 它通过ui subprocess.Popen执行第二个python脚本(其源代码我无法控制) 除了一个问题外,它是有效的。第二个python脚本有一个包含以下代码的函数 try: with open(os.ctermid(), "rb") as f: height, width = struct.unpack("hh", ioctl(f.fil

我编写了一个小python脚本,它运行另一个python脚本,并对其输出进行一些基本处理。然后,它将此输出用作sublime文本插件的一部分

它通过ui subprocess.Popen执行第二个python脚本(其源代码我无法控制)

除了一个问题外,它是有效的。第二个python脚本有一个包含以下代码的函数

try:
  with open(os.ctermid(), "rb") as f:
    height, width = struct.unpack("hh", ioctl(f.fileno(), TIOCGWINSZ, "1234"))
  except (IOError, OSError, struct.error):
    # return default size if actual size can't be determined
    __warn_terminal_width_once()
    return __default_terminal_width
return width
此异常总是在命令
open(os.ctermid(),“rb”)
时触发。 虽然我可以使用默认的输出大小并过滤掉警告,但如果能够以某种方式进行设置以使ctermid()成功,那就更好了。这可能吗

编辑:如果我注释掉try块,则打印的异常为

  File "/usr/lib/python2.7/dist-packages/catkin_tools/common.py", line 445, in terminal_width_linux
    with open(os.ctermid(), "rb") as f:
IOError: [Errno 6] No such device or address: '/dev/tty'

另外,如果有帮助的话,我的代码的完整源代码是在第61行执行子进程调用的。ctermid()仅在Unix操作系统上可用。你在用什么操作系统?另外,请更新你的问题,包括它给出的异常。这是运行在Ubuntu 16.04上的。第二个脚本中的try块捕获到异常,我编辑了它并用它的输出更新了问题。它试图获取窗口大小,但只有当它有一个控制终端时,这才有效。您正在通过管道(Popen)运行它,因此子流程的stdin不是终端。所以它总是会失败。这不是我所希望的答案,但我想我必须解决这个问题。谢谢你的帮助。