运行curses.initscr()时,诅咒给出错误-Python

时间:2019-12-03 17:07:18

标签: python-3.x windows pycharm python-idle python-curses

背景:

每当我在IDLE中运行s = curses.initscr()时,都会收到以下错误消息:

  File "C:/Users/jacob/AppData/Local/Programs/Python/Python37-32/screentest.py", line 3, in <module>
    s = curses.initscr()
  File "C:\Users\jacob\AppData\Local\Programs\Python\Python37-32\lib\curses\__init__.py", line 30, in initscr
    fd=_sys.__stdout__.fileno())
AttributeError: 'NoneType' object has no attribute 'fileno'

这是来自PyCharm的消息:


Redirection is not supported.

Process finished with exit code 1

当我从DevDungeon运行示例代码片段时,


print("Preparing to initialize screen...")
screen = curses.initscr()
print("Screen initialized.")
screen.refresh()

curses.napms(2000)
curses.endwin()

print("Window ended.")

在启动python的命令提示符下,它只会显示无法交互的黑屏。

shell中发生的事情是否正确?

到底是怎么回事?

我该如何解决?

请帮助谢谢

1 个答案:

答案 0 :(得分:0)

CREATE OR REPLACE PACKAGE COUNT_STUFF_PKG AS CURSOR csrCount_stuff IS SELECT ((SELECT count(*) FROM persona WHERE DTYPE = 'Vendedor' AND ACTIVO = 1) * (SELECT count(*) FROM TIPO_DOCUMENTO WHERE ENTIDAD = 'Vendedor' AND ACTIVO = 1) + (SELECT count(*) FROM persona WHERE DTYPE = 'Peoneta' AND ACTIVO = 1) * (SELECT count(*) FROM TIPO_DOCUMENTO WHERE ENTIDAD = 'Peoneta' AND ACTIVO = 1) + (SELECT count(*) FROM VEHICULO WHERE ACTIVO = 1) * (SELECT count(*) FROM TIPO_DOCUMENTO WHERE ENTIDAD = 'Vehiculo' AND ACTIVO = 1 )) AS total, --Vigentes ((SELECT COUNT(*) FROM DOC_PERS WHERE FECHA_VIGENCIA > SYSDATE +30 AND ACTIVO = 1) + (SELECT COUNT(*) FROM DOC_VEH WHERE FECHA_VIGENCIA > SYSDATE +30 AND ACTIVO = 1))AS Vigentes, --PorVencer ((SELECT COUNT(*) FROM DOC_PERS WHERE FECHA_VIGENCIA < SYSDATE +30 AND FECHA_VIGENCIA > SYSDATE + 15 AND ACTIVO = 1) + (SELECT COUNT(*) FROM DOC_VEH WHERE FECHA_VIGENCIA < SYSDATE +30 AND FECHA_VIGENCIA > SYSDATE +15 AND ACTIVO = 1)) AS PorVencer, --Criticos ((SELECT COUNT(*) FROM DOC_PERS WHERE FECHA_VIGENCIA < SYSDATE +15 AND FECHA_VIGENCIA > SYSDATE AND ACTIVO = 1) + (SELECT COUNT(*) FROM DOC_VEH WHERE FECHA_VIGENCIA < SYSDATE +15 AND FECHA_VIGENCIA > SYSDATE AND ACTIVO = 1)) AS Criticos FROM DUAL; FUNCTION COMPUTE_STUFF RETURN COUNT_STUFF_PKG.csrCount_stuff%ROWTYPE END COUNT_STUFF_PKG; CREATE OR REPLACE PACKAGE BODY COUNT_STUFF_PKG AS FUNCTION COMPUTE_STUFF RETURN COUNT_STUFF_PKG.csrCount_stuff%ROWTYPE IS rowCount_stuff COUNT_STUFF_PKG.csrCount_stuff%ROWTYPE; BEGIN OPEN csrCount_stuff; FETCH csrCount_stuff INTO rowCount_stuff; CLOSE csrCount_stuff; RETURN rowCount_stuff; END COMPUTE_STUFF; END COUNT_STUFF_PKG; 是python进程的原始sys.stdout。当您使用仅在Windows上存在的pythonw.exe启动python时,python最初会执行if(rb = null) { Debug.LogError("Could not find Rigid Body!\n" + this.name); } 。 (我不确定* nix上会发生什么。)pythonw.exe用于在没有关联文本控制台的情况下通过GUI UI运行python。在Windows上,IDLE图标和“开始”菜单项与pythonw一起运行python。与其他GUI IDE相同。

if(rb == null) 与文本终端或控制台一起运行。假设sys.__stdout__就是这样。当stdout = __stdout__ = None为“无”时,它将无法工作。

如果您使用curses从命令行终端/控制台启动IDLE,则sys.__stdout__将是该终端,并且它将具有fileno()。之后,我不知道会发生什么。如果您的程序使用curses,则最好在文本控制台中运行它。