这个问题之前已被问过,但我认为,这些例子有点令人困惑。 这是我的情况:
脚本: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确实存在。
答案 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