免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2502 | 回复: 7
打印 上一主题 下一主题

当raw_input遇上ssh就没有输出了 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-09-24 09:44 |只看该作者 |倒序浏览
情况概述:
A机有py脚本abc.py,内容如下
  1. #!/bin/env python
  2. print 123
  3. aa = raw_input("please write some")
  4. print aa
复制代码
直接在本机执行没有什么特别

但是从B机ssh过来执行这个脚本的时候,所有输出就没有了,
只有当输入任意字符并回车以后,才会有输出
ssh 127.0.0.1 "python abc.py"
之后没有输出
输入任意字符并回车之后
才会输出
123
please write some
输入的字符

按顺序执行的角度来看
应该是打印了123和please write some以后,才是阻塞,要求输出文字的
但是现在是变成了一开始就阻塞,要求输入了,输入完成了才会有其他输出

试了python 2.4、2.7都有这个问题,raw_input跟input都是一样

这样的话,raw_input的prompt就没有任何意义了

求大侠赐教,如何解决这个问题呢

论坛徽章:
0
2 [报告]
发表于 2012-09-24 10:11 |只看该作者
问题已解决,关闭输出缓冲就OK了

#!/bin/env python -u

可以结贴了

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
3 [报告]
发表于 2012-09-24 11:27 |只看该作者
1, print操作stdout, 并且默认newline是\n.
2, 在本机执行的时候, stdout关联终端, 所以为行缓冲, 因为print默认newline输出\n, 所以导致stdout立即刷新到终端.
3, 在ssh远程执行的时候, stdout关联socket, 所以为全缓冲, 因此print即便输出\n, 也不会导致stdout立即刷新.

最后, 楼主即便没有看到输出, 其实只要输入内容到raw_input程序就会继续跑, 内容只是被buffer了, 代码已经阻塞在了raw_input.

这个问题不需要-u, 直接在代码里做好兼容性即可:
  1. #python3.2
  2. #coding=utf8

  3. import sys
  4. import time

  5. print(123)
  6. sys.stdout.flush()
  7. time.sleep(10)
复制代码

论坛徽章:
0
4 [报告]
发表于 2012-09-24 13:49 |只看该作者
在修炼py中,学习了!

论坛徽章:
0
5 [报告]
发表于 2012-09-27 20:47 |只看该作者
linux_c_py_php 发表于 2012-09-24 11:27
1, print操作stdout, 并且默认newline是\n.
2, 在本机执行的时候, stdout关联终端, 所以为行缓冲, 因为pri ...


学习了,感谢大侠相助

论坛徽章:
0
6 [报告]
发表于 2012-09-29 01:30 |只看该作者
linux_c_py_php 发表于 2012-09-24 11:27
1, print操作stdout, 并且默认newline是\n.
2, 在本机执行的时候, stdout关联终端, 所以为行缓冲, 因为pri ...


学习了。。。

论坛徽章:
0
7 [报告]
发表于 2012-09-29 13:55 |只看该作者
好贴 学习了

论坛徽章:
2
CU大牛徽章
日期:2013-04-17 11:46:28CU大牛徽章
日期:2013-04-17 11:46:39
8 [报告]
发表于 2012-09-29 14:29 |只看该作者
偷偷学习一下....
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP