【问题标题】:Python 2.7 no console output in Windows 10Python 2.7 在 Windows 10 中没有控制台输出
【发布时间】:2016-09-23 21:45:09
【问题描述】:

在 Windows 10 64 位家庭高级版上使用 python 2.7.11 从 Windows 7 就地升级

在标准控制台中,以下代码保存为 hello.py 并打印: 你好世界 调用时 python hello.py

#! python
print 'Hello World'

调用时根本不产生控制台输出 hello.pyhello

程序在所有三种情况下都运行。
我可以通过添加来证明这一点

with open('world.txt', 'w') as fh:
    fh.write('dolly\n')

调用程序的三种方法中的每一种都成功地用正确的信息编写了world.txt。

python.exe 在我的路径中
.py 在 pathext 变量中
.py 与 python.exe 关联,正确的命令行在“shell open”注册表项中。

以上均符合
https://docs.python.org/2/faq/windows.html
在没有 Windows 7 扩展的情况下,我从命令行运行 python 脚本没有问题

谢谢,

【问题讨论】:

  • 更新:尝试 sys.stdout.write() 和 stderr.write() 显示相同的行为。以提升的权限运行没有帮助
  • 将实际命令行写入文件:subprocess.call('wmic process where processid=%d get commandline' % os.getpid(), stdout=fh).
  • 我以为我找到了答案:stackoverflow.com/questions/3018848/… 指向:support.microsoft.com/en-us/kb/321788 我的注册表已经有了正确的值

标签: python windows


【解决方案1】:

一时兴起,我导航到了我之前评论中指定的注册表项。
这里的说明:https://support.microsoft.com/en-us/kb/321788
说要将 REG_DWORD 值“InheritConsoleHandles”添加到密钥
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
并将其值设置为 1

我将其值设置为 0 并打开一个新的命令提示符。 随后,运行没有扩展名的 python 脚本“正常工作”

我喜欢奇思妙想

【讨论】:

  • 您之前的 Windows 7 安装是否有此设置?它没有在 Windows 10 的全新安装中进行配置。我添加了它,并且可以确认它在通过 ShellExecuteEx 运行脚本时会中断控制台 I/O,而不是直接调用 CreateProcess 来运行 python.exe。所以我运行cdb -o cmd 来调试命令提示符和所有子进程。使用此设置,将创建 python.exe 进程,并将其标准句柄设置为NULL。许多底层控制台 API 已在 Windows 8/10 中重写。新代码意味着新错误。
  • 是的,我几乎可以肯定它确实如此。我今天检查的 W10 安装没有这个键和值
  • 这是一种晦涩的设置,几个月后有人可能会配置并忘记,升级到 Windows 10 后才面临这个莫名其妙的错误。
猜你喜欢
  • 2017-03-16
  • 1970-01-01
  • 2011-08-06
  • 1970-01-01
  • 2015-12-31
  • 1970-01-01
  • 2018-01-20
相关资源
最近更新 更多