簡體   English   中英

使用python子進程創建計划任務

[英]creating scheduled tasks using python subprocess

我在使用python創建計划任務時遇到問題。 執行我的命令后,計划任務的操作部分將分為參數和路徑片,並使其無效。 我嘗試了很多類似“ \\” mypath \\””的方法,但是沒有成功。 如何將可執行文件的路徑連接到使計划任務的任務動作有效的變量?

IMG-1:使用腳本創建計划任務之后。動作路徑無效。

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

即使命令行聽起來不錯,您也應該依賴參數列表,而不是字符串參數。 popen做繁重的工作並正確引用參數,而不要自己嘗試。

我將其重寫如下(並刪除shell=True ,並從subprocess.Popen直接合並stdout + stderr以避免潛在的死鎖)

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似乎存在限制。 因此,解決方法是計算Windows短路徑(從該SO問題提起)

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調用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM