Python程序运行故障:asp.py终端无输出但Python Shell执行正常
这种情况我碰到过好几次,大概率是下面几个原因之一,你可以逐一排查:
代码未被触发执行:
如果你把输出相关的代码放在了函数里,但忘记在脚本末尾调用这个函数,终端运行时就不会执行到核心逻辑。比如你的脚本是这样的:import pyperclip def print_hello(): print('hello world') pyperclip.copy('hello world')而你在Python Shell里会手动调用
print_hello(),所以能看到输出。解决办法是在脚本末尾加上入口判断:if __name__ == '__main__': print_hello()pyperclip操作本身不产生终端输出:
如果你脚本里只有pyperclip.copy('hello world'),这个命令只是把文本复制到系统剪贴板,不会在终端打印任何内容。而你在Shell里可能额外执行了print(pyperclip.paste())才看到结果。如果要在终端显示内容,脚本里必须显式加上print()语句。标准输出被缓冲:
少数情况下,Python的标准输出会在终端运行时被缓冲,导致内容没及时显示。比如你用了不带换行的打印:print('hello world', end=''),这时候输出会留在缓冲区里。解决办法是给print加上flush=True参数:print('hello world', flush=True)或者在脚本末尾手动刷新缓冲区:
import sys sys.stdout.flush()Python解释器版本不一致:
检查终端里用的Python命令和Shell里的是不是同一个版本。比如终端用python asp.py,但Shell里默认是python3,如果pyperclip只安装在Python3环境里,虽然脚本导入时可能没报错(有些系统会软链接),但后续逻辑可能异常。可以在终端和Shell里分别执行python --version和python3 --version确认,然后用对应的命令运行脚本。
内容的提问来源于stack exchange,提问作者Anurag Chhabra

