如何从用Python编写的Windows 10服务启动非交互式GUI?

时间:2017-10-30 19:56:45

标签: windows-services subprocess windows-10 teststand

我正在尝试自动运行" Teststand"来自Windows服务的脚本。 到目前为止,我已通过从命令提示符调用以下内容来完成自动化:

C:\Program Files (x86)\National Instruments\TestStand 2013\Bin> 
SeqEdit.exe /runEntryPoint "Single Pass" "c:\Users\pathtofile\MyTests.seq" /quit

我使用的是Python,因此我使用子进程模块实现了这一点。它可以打开,运行,保存结果,并自行关闭。 完美!!!但是,因为它启动了Teststand GUI,所以它不能在Windows服务中工作。我甚至不需要GUI(因为我不接触它,结果存储在一个文件夹),但我似乎无法在没有它的情况下运行Teststand。

我使用win32搞乱了CreateProcessAsUser(),但我似乎无法使用任何东西。 任何人都可以在Python中提供使用上述命令从Windows服务运行Teststand序列的解决方案(Windows 10)

1 个答案:

答案 0 :(得分:0)

On选项可以是使用TestStand API直接使用引擎运行序列。这是example from the NI Knowledge Base

import win32com.client
tsEngine = win32com.client.Dispatch('TestStand.Engine.1')
print('TestStand %s.%s ready' % (tsEngine.MajorVersion, tsEngine.MinorVersion))
sequencePath = 'C:\\Users\\Desktop\\Sequence File 1.seq'
seqFile = tsEngine.GetSequenceFileEx(sequencePath)
execution = tsEngine.NewExecution(seqFile, "MainSequence", None, False, 0)
execution.WaitForEndEx(60000)
print(execution.ResultStatus)
tsEngine.ReleaseSequenceFileEx(seqFile, 0x4)

通过使用它,我发现要关闭它,我必须使用del来清除对executionseqFile的引用,并还要处理UIMessages以确保存在在执行结束时没有未完成的操作。