我试图在Windows 7上使用Sikuli和脚本自动安装特定程序。我需要启动程序安装程序,然后使用Siluki逐步完成其余的安装。我是用Python 2.7做的。
此代码按预期工作,创建一个线程,调用子进程,然后继续主进程:
import subprocess
from threading import Thread
class Installer(Thread):
def __init__(self):
Thread.__init__(self)
def run(self):
subprocess.Popen(["msiexec", "/i", "c:\path\to\installer.msi"], shell=True)
i = Installer()
i.run()
print "Will show up while installer is running."
print "Other things happen"
i.join()
此代码无法按预期运行。它将启动安装程序,但随后挂起:
import subprocess
from threading import Thread
class Installer(Thread):
def __init__(self):
Thread.__init__(self)
def run(self):
subprocess.call("msiexec /i c:\path\to\installer.msi")
i = Installer()
i.run()
print "Will not show up while installer is running."
print "Other things happen"
i.join()
我知道subprocess.call会等待进程终止。为什么这会阻止主线程继续?主进程调用后主要是否应继续执行?
为什么行为会有这样的差异?
我刚刚开始使用线程C。
答案 0 :(得分:0)
首先
您需要将命令行参数添加到install命令以使其成为静默安装。 http://msdn.microsoft.com/en-us/library/aa372024%28v=vs.85%29.aspx 子进程可能会挂起,等待一个永远不会结束的安装进程,因为它正在等待用户输入。
第二
如果这不起作用..你应该使用popen并进行沟通 How to use subprocess popen Python
第三
如果仍然无效,那么您的安装程序会挂在某处,您应该在那里调试基础进程。
答案 1 :(得分:0)
您正在调用i.run(),但您应该调用的是i.start()。 start()在一个单独的线程中调用run(),但直接调用run()将在主线程中执行它。