如何在Sikuli的背景下運行批處理文件?如何在Sikuli的背景下運行批處理文件?
環境:WinXP,Python 2.7,Sikuli r930。
假設我有一個簡單的批處理文件startNotepad.bat其中包含1號線:
import os
os.system("startNotepad.bat")
os.system("d:\\newDir\\startNotepad.bat")
print("hello notepad")#displayed while 2 instances of notepad are running
:
START notepad
我使用使用os.system從Python腳本方法啓動批處理文件
當我從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解釋器。行爲可以以某種方式配置?有沒有解決方法?
Sikuli使用Jython,而不是Python,因此您應該使用它進行測試。但我不認爲這是問題。你可以看看'sikuli-tmp'文件,看看那裏的內容是否有幫助? –
你不想通過Sikuli腳本啓動記事本的任何原因。例如'App(「notepad.exe」)。open()'?你可能想看看'subprocess.call'或'subprocess.Popen' [http://www.jython.org/docs/library/subprocess.html] – blotto
@ blotto: App(「somePath \\ someBatch.bat 「).open()的作品。謝謝。現在很容易。我認爲這是使用Sikuli內置方法的最佳方法。 –