使用python子进程创建计划任务

时间:2017-01-16 12:55:32

标签: python python-2.7 cmd scheduled-tasks

我在使用python创建计划任务时遇到问题。执行我的命令后,计划任务的操作部分将拆分为参数和路径切片并使其无效。我尝试过很多方法,比如“\”mypath \“”但是没有成功。 如何将可执行文件的路径连接到使计划任务的任务操作有效的变量?

IMG-1: After creating scheduled task using script. Action path is invalid.

import os
import subprocess


path = os.environ['APPDATA']
filename = "test.exe"
path = path+"\\"+filename

command = 'schtasks.exe /CREATE /RU "%USERNAME%" /SC ONLOGON /TN "testServiceHello" /TR "'+path+'"'


proc = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
stdout_value = proc.stdout.read() + proc.stderr.read()
print stdout_value
print "--"*50
print command

1 个答案:

答案 0 :(得分:0)

即使命令行听起来没问题,你也应该依赖参数列表,而不是参数作为字符串。让react-native run-android做繁重的工作并正确引用您的参数,而不是自己尝试。

我将重写如下(并将删除popen,并直接从shell=True合并stdout + stderr以避免潜在的死锁)

subprocess.Popen

您可以打印command = ['schtasks.exe','/CREATE','/RU',os.getenv("USERNAME"),'/SC','ONLOGON','/TN','testServiceHello','/TR',os.path.join(os.environ['APPDATA'],"test.exe")] proc = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) stdout_value = proc.stdout.read() 将发出的命令,如下所示:

subprocess

在您的情况下,您有一个额外的问题,因为subprocess.list2cmdline(command) 似乎存在限制。因此,解决方法是计算Windows短路径(从this SO question提升)

schtasks.exe

继续import win32api long_file_name=os.path.join(os.environ['APPDATA'],"test.exe") short_file_name=win32api.GetShortPathName(long_file_name) command = ['schtasks.exe','/CREATE','/RU',os.getenv("USERNAME"),'/SC','ONLOGON','/TN','testServiceHello','/TR',short_file_name] 来电