如何从 Sikuli 在后台运行批处理文件?
环境:WinXP,Python 2.7,Sikuli r930。
假设我有一个简单的批处理文件startNotepad.bat,其中包含 1 行:
START notepad
我使用Python 脚本中的os.system方法启动批处理文件:
import os
os.system("startNotepad.bat")
os.system("d:\\newDir\\startNotepad.bat")
print("hello notepad")#displayed while 2 instances of notepad are running
当我从 Python 脚本启动它时,它的行为就像我想要的那样——记事本窗口在后台打开,Python 脚本在调用批处理文件后继续。我还在Sikuli 脚本中使用os.system启动批处理文件,但问题来了。Sikuli 脚本如下所示:
import os
os.system("d:\\newDir\\startNotepad.bat")
print("hello notepad")#displayed only after notepad is closed
当我从 Sikuli IDE 启动它时,出现错误:
[info] Sikuli vision engine loaded.
[info] Windows utilities loaded.
[info] VDictProxy loaded.
[error] Stopped
[error] Linia 2 zawiera blad
[error] Informacja o bledzie: Traceback (most recent call last):
File "C:\DOCUME~1\*********\LOCALS~1\Temp\sikuli-tmp2989271839024887193.py", line 2, in
os.system("d:\\newDir\\startNotepad.bat")
File "C:\Program Files\Sikuli X\sikuli-script.jar\Lib\subprocess.py", line 456, in call
File "C:\Program Files\Sikuli X\sikuli-script.jar\Lib\subprocess.py", line 751, in __init__
File "C:\Program Files\Sikuli X\sikuli-script.jar\Lib\subprocess.py", line 1236, in _execute_child
TypeError: unsupported operand type(s) for +: 'NoneType' and 'list'
好的,这没什么大不了的,因为无论如何我都使用可执行的 Sikuli 脚本。但是,在非 gui 模式下,它的行为并不像预期的那样——Sikuli 脚本会一直等到记事本关闭。
为什么os.system在纯 Python 和 Sikuli 的情况下工作方式不同?我猜这是因为 Sikuli 有自己的 Python 解释器。可以以某种方式配置行为吗?有什么解决方法吗?