使用AutoIt从控制台捕获输出

时间:2014-03-13 09:53:10

标签: python autoit

这个问题之前已被问过,但我认为,这些例子有点令人困惑。 这是我的情况:

脚本:Python 位置:在Windows机器上“C:\ Users \ Somedomain \ Desktop \ Temp \ test.py”

Test.py看起来像这样:

def Fun1(t):
    import time
    print t.capitalize()
    time.sleep(5)
    return t.capitalize()

if __name__ == "__main__":
    Fun1('arindam')

我可以从cmd提示符(Ctrl + R)运行它,然后粘贴: python C:\ Users \ inchowar \ Desktop \ Temp \ test.py

AUtoIt脚本如下:

#include <Constants.au3>
$temp = MyFun1()
MsgBox(64, "Result", $temp)

Func MyFun1()
   Local $pid =  Run('python C:\Users\inchowar\Desktop\Temp\test.py')
   if ProcessExists($pid) Then
      MsgBox(64, 'Result', 'Its Works..Till here')
      $var = StdoutRead($pid)
      MsgBox(64, 'Result', $var)
   EndIf
   ProcessClose($pid)
EndFunc

我想在这里做什么:

我希望输出“Arindam”在MsgBox中显示$ var。

使用上面的脚本,python脚本运行,在shell上显示输出,然后Main MsgBox显示为空白。第一个msgbox会在弹出成功时显示出来,证明pid确实存在。

1 个答案:

答案 0 :(得分:0)

您在RUN命令中缺少特殊标志,a&#34;返回&#34;为了功能 返回一个值。 如果test.py无限期地运行,那么删除while循环,但要记住它需要等待一段时间才能捕获&#34;控制台输出。

#include <Constants.au3>
$temp = MyFun1()
MsgBox(64, "Result", $temp)

Func MyFun1()
   Local $pid =  Run('python C:\Users\inchowar\Desktop\Temp\test.py', @SW_HIDE, 

$STDERR_CHILD + $STDOUT_CHILD)
$var = ""
While 1
    $var &= StderrRead($pid)
    If @error Then ExitLoop
WEnd

   if $var <> "" Then
      MsgBox(64, 'Result', 'Its Works..Till here')
      MsgBox(64, 'Result', $var)
   EndIf

   ProcessClose($pid)
   Return $var
EndFunc