python - 如何从 Sikuli 在后台运行批处理文件?

标签 python batch-file sikuli

如何从 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 解释器。可以以某种方式配置行为吗?有什么解决方法吗?

最佳答案

其行为与 python 不同,因为 Sikuli 的运行时是 Java。 Sikuli 使用 Jython,而 jython 是使用 python 语法编写的 Java。

根据 os.system(command) 的文档,它会阻止从生成的子 shell 返回返回代码。 (http://docs.python.org/2/library/os.html#os.system)

Python 和 Java 中的默认 shell 状态可能不同,一个在 shell 命令完成时返回,另一个等待所有句柄关闭。

理想情况下,您想要的是非阻塞子进程。

您可以使用 python 的 subprocess.popen 或 Sikuli 的 App.open() 来实现此目的

关于python - 如何从 Sikuli 在后台运行批处理文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16558431/

相关文章:

date - 检查文件在过去 xx 天后是否被修改

internet-explorer - 用于将受信任的 Intranet 站点添加到 IE 的命令行

robotframework - 如何让sikuli专注于桌面屏幕

java - 西库利无法区分颜色

python - 无法在 Sikuli 中导入 PIL

python - 将当前过滤器选择提供给 Django 中的另一个自定义 SimpleListFilter

python - 带小数秒的时间字符串

python - 列表矩阵 - Python

batch-file - 使用 xcopy 并行复制

python - 如何使用 Pillow 将图像粘贴到更大的图像上?