请问python里的os.popen3(cmd)能接受多长的返回值?

wangliangkai 2010-09-10 04:38:53
1、在python里的 stdin, stdout, stderr = os.popen3(cmd) 的 os.popen3(cmd) 能接受多长的返回值,在开发中发现超过4000的长度就无法接收返回值,有其他更好的方法能接收更长字符串的返回值吗?
注: cmd 是linux命令,可返回一个超过4000字符长度的字符串返回值。
...全文
678 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
angel_su 2010-09-17
  • 打赏
  • 举报
回复
有多大?报啥错?

如果确是太大问题,一开始stdout=subprocess.PIPE改一下,换成定向到一个文件,解析时一行行或读入一定大小下循环处理...
angel_su 2010-09-17
  • 打赏
  • 举报
回复
4500很小很小的说,问题应该在其他地方...
wangliangkai 2010-09-17
  • 打赏
  • 举报
回复
字符集最长时是4500个字符,执行到“re.search(r"Status code = (?P<status_code>-?\d+)", stdout)” 时不报错,就是挂起一直没返回。
wangliangkai 2010-09-16
  • 打赏
  • 举报
回复
这个可以调用接收返回超过4000字符, 不过还出现一个问题在用 re.search获取解析字符时stdout 超长,有没有其他方法处理这个re.search 查询的字符串超长问题。
p=subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
(stdout,stderr) = p.communicate()
re.search(r"Status code = (?P<status_code>-?\d+)", stdout)
谢谢!
wangliangkai 2010-09-13
  • 打赏
  • 举报
回复
buffer加大到了:1024*1024*1024 还是不行。
angel_su 2010-09-13
  • 打赏
  • 举报
回复
没效果的话估计大小就是系统默认的不能改,只是在设置buffer/unbuffer模式。
试试subprocess模块吧,用communicat()方法把缓冲读掉,不然程序输出塞饱stdout就卡住了...
iambic 2010-09-10
  • 打赏
  • 举报
回复
不太可能有这个限制吧……
angel_su 2010-09-10
  • 打赏
  • 举报
回复
os.popen3(cmd[, mode[, bufsize]]) 加大buffer试试。另外,这个函数已列为弃用,看看有关subprocess模块...

37,738

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧