找回密码
 加入
搜索
查看: 3823|回复: 8

[AU3基础] [已解决]字符串连接操作的问题

  [复制链接]
发表于 2013-5-7 17:21:24 | 显示全部楼层 |阅读模式
本帖最后由 sv0002 于 2013-5-8 14:52 编辑

帮助文件里有这样一个例子,我只是把执行的命令改了一下,并且想把命令结果保存下来,可是保存的命令结果只是第一次连接操作的结果,而不是全部,我要怎么办?
#include <Constants.au3>

Local $foo = RunWait(@ComSpec & " /c ping  -n 20 [url]www.163.com[/url]", @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
Local $line,$re

While 1
    $line = StdoutRead($foo)
    If @error Then ExitLoop
$re &= $line
    MsgBox(0, "STDOUT 读取:", $line)
Sleep(1000)
WEnd
MsgBox(0,"result",$line)
While 1
    $line = StderrRead($foo)
    If @error Then ExitLoop
    MsgBox(0, "STDERR 读取:", $line)
WEnd
MsgBox(0,"result",$line)

MsgBox(0, "调试", "准备退出...")
发表于 2013-5-7 19:27:18 | 显示全部楼层
#include <Constants.au3>
Local $line, $re
Local $foo = Run(@ComSpec & " /c ping  -n 20 www.163.com", @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)

While 1
        $line = StdoutRead($foo)
        If @error Then ExitLoop
        $re &= $line
WEnd
MsgBox(0, "", $re)
发表于 2013-5-7 19:53:51 | 显示全部楼层
本帖最后由 xms77 于 2013-5-7 19:54 编辑

回复 1# sv0002
Win7下好像用STDoutread函数读取命令行回显不是很好啊?
#include <Constants.au3>
Local $foo = Run(@ComSpec & " /c ping  -n 20 www.163.com", @SystemDir, @SW_HIDE, $STDOUT_CHILD)
Local $line,$re
While 1
        Sleep(22000)
    $line = StdoutRead($foo)
    If @error Then ExitLoop
        $re &= $line    
WEnd
MsgBox(0, "STDOUT 读取:", $re)
发表于 2013-5-7 20:11:19 | 显示全部楼层
回复 2# haijie1223
发哥,这个代码在win7下不能抓住全部的命令行回显
发表于 2013-5-7 21:24:58 | 显示全部楼层
回复 1#8# xms77
这样可以.
#include <Constants.au3>
Local $run = Run(@ComSpec & " /c ping  -n 2 www.163.com", @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
ProcessWaitClose($run)
MsgBox(0,"",StdoutRead($run))

评分

参与人数 1金钱 +30 贡献 +2 收起 理由
xms77 + 30 + 2 so simple, but very strong big

查看全部评分

发表于 2013-5-7 21:31:44 | 显示全部楼层
回复 8# xms77


    没有win7,xp测试可以~
 楼主| 发表于 2013-5-8 12:15:30 | 显示全部楼层
回复 5# user3000

谢谢,你的方法是等待命令执行完毕,可以获取完整的命令结果。我在意的另一个地方是
$re &= $line
这行代码,经过测试,XP、Win2003下没问题,但Win7下不能获得期待的效果,
可能是autoit处理字符串时,存储机制和Win7的兼容配合方面有缺陷,
如果有字符串的复制函数,也许可以利用它获得期望的结果。
 楼主| 发表于 2013-5-8 12:18:45 | 显示全部楼层
回复 3# xms77

谢谢,XP下测试可行,Win7要等命令执行完毕时再读缓冲区才是正确的结果。
 楼主| 发表于 2013-5-8 12:23:37 | 显示全部楼层
[code]回复 5# user3000
回复 3# xms77
回复 2# haijie1223
感谢user3000、发哥和xms77的热心帮助。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-9-29 05:31 , Processed in 0.105135 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表