我试图运行此powershell命令:
Unregister-ScheduledTask -TaskPath "\Lsports Tasks" -a
当我从powershell运行它时,它工作正常,我从python脚本中获得了相同的输出,但是当我从我的python脚本中运行时,没有任何反应,我得到了与从powershell命令中获得的输出相同的输出,但它没有工作,这是我的脚本:
import psutil
import os
os.system("""powershell -command ""Unregister-ScheduledTask -TaskPath "\Lsports Tasks\" -a""")
commands = []
for proc in psutil.process_iter(['pid','name']):
process = proc.info
if process['name'] == 'svchost.exe':
pid = process['pid']
cmds = psutil.Process(pid=int(pid)).cmdline()
cmd = ' '.join(cmds)
commands.append(cmd)
i = 0
for c in commands:
i+= 1
task = os.system(f"""SCHTASKS /CREATE /SC ONSTART /RU system /TN "Lsports Tasks\Lsports Runner{i}" /TR "{c}""".format(i,c=c))
从命令获取的输出即时消息:
CimJob1 CimJob Running
谢谢!
答案 0 :(得分:0)
首先,您应该授予程序管理员特权。它可以工作。(在Windows上) 像这样:
import ctypes
import time
import sys
import os
import psutil
def is_admin():
try:
return ctypes.windll.shell32.IsUserAnAdmin()
except:
return False
if is_admin():
os.system("""powershell -command ""Unregister-ScheduledTask -TaskPath "\Lsports Tasks\" -a""")
commands = []
for proc in psutil.process_iter(['pid', 'name']):
process = proc.info
if process['name'] == 'svchost.exe':
pid = process['pid']
try:
cmds = psutil.Process(pid=int(pid)).cmdline()
except:
pass
cmd = ' '.join(cmds)
commands.append(cmd)
i = 0
for c in commands:
i += 1
task = os.system(f"""SCHTASKS /CREATE /SC ONSTART /RU system /TN "Lsports Tasks\Lsports Runner{i}" /TR "{c}""".format(i, c=c))
else:
if sys.version_info[0] == 3:
ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, __file__, None, 1)
else:
ctypes.windll.shell32.ShellExecuteW(None, u"runas", unicode(sys.executable), unicode(__file__), None, 1)
当我在admin shell中运行此命令时,它是正确的,可能会丢失一些pid。因此请在此处添加缓存部分。