ValueError: 错误的文件描述符,宽度 = os.get_terminal_size().columns

问题描述

我收到此错误

Traceback (most recent call last):
  File "C:\Users\myname\OneDrive\Desktop\DxubleG's follwo bot\bot.py",line 10,in <module>
    width = os.get_terminal_size().columns
ValueError: bad file descriptor

代码部分是:

from colorama import init,Fore,Style
from discord.ext import commands
import subprocess
import requests
import discord
import ctypes
import os

init(convert=True)
width = os.get_terminal_size().columns
ctypes.windll.kernel32.SetConsoleTitleW('dxuble.lol')
token = 'Nzc0ODIxNjc1OTQyMjgxMjQ4.X6dW6w.sDk8D4FRFJXy06tEJCRLMqy6pFc'
prefix = '.'

title = [
    r'',r'',r''
]

intents = discord.Intents().all()
bot = commands.Bot(command_prefix=prefix,case_insensitive=True,intents=intents)
bot.remove_command('help')

有人知道为什么吗?

解决方法

您几乎肯定会遇到此问题,原因有以下三个:

  1. 没有终端
  2. 某些 IDE 提供的“虚拟终端”未将 sys.stdout 连接到真正的文件描述符,并且无法修补 os.get_terminal_size
  3. 可能在一个奇怪的系统上查询 stdout 的终端大小时,即使它连接到终端也不起作用

无论哪种方式,解决方案都是一样的:遵循the guidance from the docs(“shutil.get_terminal_size()是通常应该使用的高级函数,os.get_terminal_size是低级实现。” ) 和 use shutil.get_terminal_size(),它总是提供一个结果,按顺序检查:

  1. COLUMNS/LINES 的环境设置
  2. 如果它们没有被定义,它会尝试使用 os.get_terminal_size()
  3. 如果失败(系统不支持查询,或未连接到终端),它会提供回退结果,默认为 (80,24)(您可以传入自己的 tuple如果这对您来说不是一个好的默认值,请改为使用默认值,例如 cols,lines = shutil.get_terminal_size((128,32)) 回退到更大的默认维度)
,

您是否在终端中运行此脚本? 我试图运行在我的终端中失败的代码,它按预期工作。 enter image description here