Windows 10中Python 2.7无控制台输出

3

我使用的是Windows 10 64位家庭版,Python版本为2.7.11。在标准控制台中,将以下代码保存为hello.py并运行: python hello.py 将会打印出"Hello World"。

#! 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()显示相同的行为。 以提升的特权运行并没有帮助。 - Vorpal Swordsman
将实际的命令行写入文件:subprocess.call('wmic process where processid=%d get commandline' % os.getpid(), stdout=fh) - Eryk Sun
我曾以为我找到了答案: https://dev59.com/3HA75IYBdhLWcg3w899J 它指向: https://support.microsoft.com/en-us/kb/321788 我的注册表已经有了正确的值。 - Vorpal Swordsman
1个回答

1

我一时兴起,导航到了我之前评论中指定的注册表键。

这里的指令是:https://support.microsoft.com/en-us/kb/321788

说要向键HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer添加一个REG_DWORD值"InheritConsoleHandles",并将其值设置为1。

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

我喜欢心血来潮。


你之前的Windows 7安装有这个设置吗?在Windows 10的新安装中没有配置它。我添加了它并确认当通过ShellExecuteEx运行脚本而不是直接调用CreateProcess来运行python.exe时,它会破坏控制台I/O。所以我运行了cdb -o cmd来调试命令提示符和所有子进程。使用此设置,python.exe进程被创建时其标准句柄设置为NULL。许多底层控制台API已在Windows 8/10中重写。新代码意味着新的错误。 - Eryk Sun
是的,我几乎可以确定它没有。 我今天检查过的所有W10安装都没有这个键和值。 - Vorpal Swordsman
这是一种晦涩的设置,有些人可能会配置并在几个月后忘记它,然后在升级到Windows 10后面临这个令人困惑的错误。 - Eryk Sun

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接