2017-01-16 5 views
1

У меня проблема с созданием запланированных задач с помощью python. После выполнения моей команды часть действия запланированной задачи разбивается на аргументы и фрагменты пути и делает ее недействительной. Я пробовал много способов, как «\» mypath \ », но не был успешным. Как я могу конкатенировать путь исполняемого файла к переменной, которая делает действие задачи запланированной задачи действительным?Создание запланированных задач с использованием подпроцесса python

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 

ответ

0

Даже если командная строка звучит хорошо, вы должны полагаться на список параметров, а не параметр в виде строки. Пусть popen сделайте тяжелый подъем и укажите свои параметры правильно, вместо того, чтобы пытаться сделать это самостоятельно.

Я бы переписать это следующим образом (и сброшу shell=True, и объединить стандартный вывод + 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) 

в вашем случае, у вас есть дополнительные проблемы, потому что, кажется, ограничение в schtasks.exe. Таким образом, обходной путь будет вычислять окна короткий путь (поднятый из this SO question)

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] 

и идти с subprocess вызова

+0

Спасибо и, но не решается это :(опять же вопрос. Возможно, это связано с окнами пакетный синтаксис неверен –

+0

ОК, можете ли вы выполнить 'subprocess.list2cmdline (command)' с моим решением и опубликовать результаты? –

+0

['schtasks.exe', '/ CREATE', '/ RU', 'Для ASM & Py2EXE ','/SC ',' ONLOGON ','/TN ',' testServiceHello ','/TR ',' C: \\ Пользователи \\ Для обучения \\ AppData \\ Роуминг \\ test.exe '] –

 Смежные вопросы

  • Нет связанных вопросов^_^