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