使用Python尽快打开Powershell文件

时间:2019-12-10 13:57:44

标签: python powershell optimization tkinter

当前,我正在加载一个Powershell文件,该文件将为我返回一个值。有没有办法更快地加载它?因为我的程序目前正在打开8个.ps1文件,所以要准备好使用它需要10到15秒。我可以启动程序,然后在程序已经运行时将字符串放入其中吗? (因为它是Tkinter GUI)

df1 <- structure(list(yearID = c(1994L, 1995L, 1996L, 1997L, 1998L, 
1999L, 2000L, 2001L, 2002L, 2003L, 2004L, 2005L, 2006L, 2009L, 
2010L), teamID = c("LAN", "LAN", "LAN", "LAN", "LAN", "LAN", 
"LAN", "LAN", "TEX", "TEX", "TEX", "TEX", "SDN", "PHI", "NYA"
), salary = c(109000L, 114000L, 124000L, 270000L, 700000L, 2300000L, 
3850000L, 9900000L, 6884803L, 13000000L, 14000000L, 15000000L, 
15505142L, 2500000L, 1200000L)), class = "data.frame", row.names = c("1", 
"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", 
"14", "15"))

2 个答案:

答案 0 :(得分:0)

您可以尝试一下是否更快:

import os

os.system("cmd /c powershell C:\\PowershellFiles\\bios_settings.ps1")

此外,我相信您的脚本正在按顺序在Powershell中执行脚本。我不知道这些脚本之间是否存在数据依赖关系,但是如果没有,则可以考虑使用线程并发运行所有脚本:

import os
import threading

cmds =  [
            "cmd /c powershell C:\\PowershellFiles\\bios_settings.ps1",
            "cmd /c powershell C:\\PowershellFiles\\bios_settings.ps2",
            "cmd /c powershell C:\\PowershellFiles\\bios_settings.ps3",
            "cmd /c powershell C:\\PowershellFiles\\bios_settings.ps4",
            "cmd /c powershell C:\\PowershellFiles\\bios_settings.ps5",
            "cmd /c powershell C:\\PowershellFiles\\bios_settings.ps6",
            "cmd /c powershell C:\\PowershellFiles\\bios_settings.ps7",
            "cmd /c powershell C:\\PowershellFiles\\bios_settings.ps8"
        ]

def thread_function(index):
    os.system(cmds[index])

for i in range(len(cmds)):
    x = threading.Thread(target = thread_function, args = (i, ))
    x.start()

答案 1 :(得分:0)

假设您将字符串放入标签中,则可以在创建标签后使用.configure()方法更改标签。因此,您可以创建tkinter GUI并在Powershell完成后使用.configure()对其进行更新。如果有任何使用的按钮,则可以等待稍后显示它们或禁用它们,直到powershell命令完成。

myLabel.configure(text=bios)

或者您可以使用stringVar对其进行更新。

bios = StringVar()
myLabel = Label(root, textvariable=bios)

p = subprocess.check_output(["powershell.exe", "C:\\PowershellFiles\\bios_settings.ps1"])
    bios.set(str(p))
    if bios.get() == 'b\'[BIOS:config:Network:MACAdressPassThr]disabled\\n\\r\\n\'':
        bios.set('[BIOS:config:Network:MACAdressPassThr]\tdisabled')
    else:
        bios.set('[BIOS:config:Network:MACAdressPassThr]\tenabled')

但是,未处理的字符串会在那儿闪烁一秒钟。