问题描述
我收到此错误:
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')
有人知道为什么吗?
解决方法
您几乎肯定会遇到此问题,原因有以下三个:
- 没有终端
- 某些 IDE 提供的“虚拟终端”未将
sys.stdout
连接到真正的文件描述符,并且无法修补os.get_terminal_size
- 可能在一个奇怪的系统上查询
stdout
的终端大小时,即使它连接到终端也不起作用
无论哪种方式,解决方案都是一样的:遵循the guidance from the docs(“shutil.get_terminal_size()
是通常应该使用的高级函数,os.get_terminal_size
是低级实现。” ) 和 use shutil.get_terminal_size()
,它总是提供一个结果,按顺序检查:
-
COLUMNS
/LINES
的环境设置 - 如果它们没有被定义,它会尝试使用
os.get_terminal_size()
- 如果失败(系统不支持查询,或未连接到终端),它会提供回退结果,默认为
(80,24)
(您可以传入自己的tuple
如果这对您来说不是一个好的默认值,请改为使用默认值,例如cols,lines = shutil.get_terminal_size((128,32))
回退到更大的默认维度)