Task Scheduler returns 0xFFFFFFFF in Windows 7 - python

I created a Python script that collects data from a website and generates an Excel file based on a table in that website. I used pyinstaller with -w -F parameters to generate a .exe file.
I ran this file a few times and it worked perfect so I decided to use Task Scheduler to run it every hour. Two days after the task worked every hour, while I was using the computer the Task Scheduler returned this error when it tried to run the .exe: 0xFFFFFFFF and a pop-up saying: Failed to "something"
Given the fact that I needed data every hour, I ran the file manually and again... it worked!
Is there any way I can fix this? How can I make sure that it won't fail again when I leave my computer online for 1 week but I'm not there to manually start it in case it fails...
Here are the settings for the Task Scheduler:
Actions:
Program/script: C:\path1\path2\path3\Script_G1.exe
/ Start in (optional): C:\path1\path2\path3\
Settings:
Allow task to be run on demand

We had a similar problem where we'd get a 0xFFFFFFFF error when running our custom .exe from Task Scheduler, but it would work fine outside of Task Scheduler.
The workaround was to create a .bat file to run the .exe and make the scheduled task call the .bat file. Not a solution, obviously, but works in a pinch.

We had a similar problem. The program accessed shared disk F:\SomeFolder\File.log and copied a file from it to the local folder. I had to change the shared disk path name in the program to use full server path.
From
F:\SomeFolder\File.log
to
\\serverName\\docs\\SomeFolder\File.log
and then it worked.

In the "Action" check the "Start in (optional)" field. It makes a difference in these situations.

Related

Shutil.move() not working with Task Scheduler despite working manually

I'm working on using Task Scheduler to run this program every morning. The python program works fine when I run it manually, but throws a FileNotFoundError when done with Task Scheduler. Here is a snippet of the code:
original = "C:/Users/work/thing/thing.xlsx"
target = "C:/Users/{}/place of work/work Team -
Documents/General/thing".format(user)
if os.path.isfile(os.path.join(target, "thing.xlsx")):
os.remove(os.path.join(target, "thing.xlsx"))
shutil.move(original, target)
print("Program executed without errors.")
Fixed by converting the python script into an executable file (via pyinstaller) and then making the exe program the action from Task Scheduler. Some ticked properties include -"grant highest permissions" I also removed the need for shutil.move() by just creating and writing to a file in the cloud location.

Task scheduler run my python script but it does nothing

I have a windows server 2012, where I need to move some .hash file from one directory to another one.
I build a simple python script that runs well when I launch it manually, the files are all moved.
Now I need to schedule windows for run it every 5 minutes. Task scheduler schedule it, and every 5 minutes execute it, but simply the files are no more moved, even if Task Schedule says it runned successfully.
I googled a lot of similar question, trying to fill the start in field, build a .cmd script and other things like that, none of these worked.
How can I fix it?
I found out later that there was something wrong with admin's permissions.
With the correct user now all works fine.

Running a python script through Windows Scheduler not working

I am trying to automate a python script through the Windows Task Scheduler but its not working. At the end of my python script. two CSV files should be created but they arent.
I tried the following:
1. Copied the address of my python.exe to Program/Script.
C:\Program Files\Python35\python.exe
In the Add arguments, i put the name of my file
Historical Aggregation.py
In the Start in (optional), i put the path of my python script
C:\Users\myname\PycharmProjects\Project1
Am I missing something
To simplify, we can create a really short .bat file, that will only receive the necessary command to run your python script.
To do so, try this:
Create a executePy.bat file in the same folder than your Python file (C:\Users\myname\PycharmProjects\Project1), with content:
#echo off
"C:\Program Files\Python35\python.exe" "Historical Aggregation.py"
Then, on your task scheduler, simply schedule a test with Program/Script:
"C:\Users\myname\PycharmProjects\Project1\executePy.bat"
Leave Add Arguments and Start In in blank. Now, your task should be ready to run.
I had a very similar issue, and solved it in a different way. Here my step by step guide:
Transform the python script to an .exe, using in the DOS cmd prompt the command:
pyinstaller -- onefile [name of the file.py]
Place the CSV file that you want to update in the same folder as the .exe file created
Create a basic task on Windows Scheduler, with the following properties:
General - select
Run whether user is logged on or not
add the PC password. For my PC, use the user name DESKTOP-M40FS79\dario and the PC password
Run with highest privileges
Triggers – select
Daily
Repeat task every 30 minutes
Stop task if it runs longer than 15 minutes
Actions
Under Program/ Script insert the path to your .exe file, for instance, C:\Pythondata\dist\test.exe
Under Start in (optional) insert the path to the directory where the CSV and .exe files are, for instance C:\Pythondata\dist\
Conditions - select
Start the task only if the computer is on AC power, and make sure you have connected the power
Wake the computer to run this task
Settings – leave the default options
Save the task by inserting the password
Leave the task status on “Ready”
Good luck!
Another approach would be to set fields as:
Program/Script - your python path (with quotation marks):
"C:\Program Files\Python35\python.exe"
Add arguments - full file name of the script, including it's path (with quotation marks):
"C:\Users\myname\PycharmProjects\Project1\Historical Aggregation.py"

Python script not running in task scheduler

So I have a python script that is copying a bunch of files between folders. This script runs exactly as intended until I try to use the task scheduler to get it to run at regular intervals. I have run it several different ways and it always runs fine, but when I create a scheduled task it gives me an error (it says it can't find a folder that I have confirmed exists). I've tried creating a batch file to launch the python script through the task scheduler and it doesn't work, even though it works when I run the batch file manually. I've also tried calling python through the scheduled task with the python script as an argument through the scheduler and it doesn't work. Running manually through python also works, double clicking the python script work. It's only through the scheduler that I can't get it to run. Suffice to say it is quite frustrating. Any ideas?
When creating the task using Task Scheduler, make sure you give full PATHs to everything, for example:
Program/script: C:\Python27\python.exe
Add arguments (optional): -u "C:\Users\MyUserName\Documents\MyScript.py"
Start in (optional): C:\Users\MyUserName\Documents
Secondly, you could also force the working folder from within your script:
import os
os.chdir(os.path.dirname(os.path.abspath(__file__)))

Problems running python script by windows task scheduler that does pscp

Not sure if anyone has run into this, but I'll take suggestions for troubleshooting and/or alternative methods.
I have a Windows 2008 server on which I am running several scheduled tasks. One of those tasks is a python script that uses pscp to log into a linux box, checks for new files and if there is anything new, copies them down to a local directory on the C: drive. I've put some logging into the script at key points as well and I'm using logging.basicConfig(level=DEBUG).
I built the command using a variable, command = 'pscp -pw xxxx name#ip:/ c:\local_dir' and then I use subprocess.call(command) to execute the command.
Now here's the weird part. If I run the script manually from the command line, it works fine. New files are downloaded and processed. However, if the Task Scheduler runs the script, no new files are downloaded. The script is running under the same user, but yet yields different results.
According to the log files created by the script and on the linux box, the script successfully logs into the linux box. However, no files are downloaded despite there being new files. Again, when I run it via the command line, files are downloaded.
Any ideas? suggestions, alternative methods?
Thanks.
You can use the windows Task Scheduler, but make sure the "optional" field "Start In" is filled in.
In the Task Scheduler app, add an action that specifies your python file to run "doSomeWork" and fill in the Start in (optional) input with the directory that contains the file.. So for example if you have a python file in:
C:\pythonProject\doSomeWork.py
You would enter:
Program/Script: doSomeWork.py
Start in (optional): C:\pythonProject
I had the same issue when trying to open an MS Access database on a Linux VM. Running the script at the Windows 7 command prompt worked but running it in Task Scheduler didn't. With Task Scheduler it would find the database and verify it existed but wouldn't return the tables within it.
The solution was to have Task Scheduler run cmd as the Program/Script with the arguments /c python C:\path\to\script.py (under Add arguments (optional)).
I can't tell you why this works but it solved my problem.
I'm having a similar issue. In testing I found that any type of call with subprocess stops the python script when run in task scheduler but works fine when run on the command line.
import subprocess
print('Start')
test = subprocess.check_output(["dir"], shell=True)
print('First call finished')
When run on command line this outputs:
Start
First call finished
When run from task scheduler the output is:
Start
In order to get the output from task scheduler I run the python script from a batch file as follows:
python test.py >> log.txt
I run the script through the batch file both on command line and through task scheduler.
Brad's answer is right. Subprocess needs the shell context to work and the task manager can launch python without that. Another way to do it is to make a batch file that is launched by the task scheduler that calls python c:\path\to\script.py etc. The only difference to this is that if you run into a script that has a call to os.getcwd() you will always get the root where the script is but you get something else when you make the call to cmd from task scheduler.
Last edit - start
After experiments... If you put there full path to python program it works without highest privileges (as admin). Meaning task settings like this:
program: "C:\Program Files\Python37\python.exe"
arguments: "D:\folder\folder\python script.py"
I have no idea why, but it works even if script uses subprocess and multiple threads.
Last edit - end
What I did is I changed task settings: checked Run with highest privileges. And task started to work perfectly while running python [script path].
But keep in mind, that title contains "Administrator: " at the begining... always...
P.S. Thanks guys for pointing out that subprocess is a problem. It made me think of task settings.
I had similar problem when one script is running from Windows Task Scheduler, and another one doesn't.
Running cmd with python [script path] didn't work for me on Windows 8.1 Embedded x64. Not sure why. Probably because of necessity to have spaces in path and issue with quotes.
Hope my answer helps someone. ;)
Create a batch file add your python script in your batch file and then schedule that batch file .it will work .
Example : suppose your python script is in folder c:\abhishek\script\merun.py
first you have to go to directory by cd command .so your batch file would be like :
cd c:\abhishek\script
python merun.py
it work for me .
Just leaving this for posterity: A similar issue I faced was resolved by using the UNC (\10.x.xx.xx\Folder\xxx)path everywhere in my .bat and .py scripts instead of the letter assigned to the drive (\K:\Folder\xxx).
I had this issue before. I was able to run the task manually in Windows Task Scheduler, but not automatically. I remembered that there was a change in the time made by another user, maybe this change made the task scheduler to error out. I am not sure. Therefore, I created another task with a different name, for the same script, and the script worked automatically. Try to create a test task running the same script. Hopefully that works!
For Anaconda installation of python in windows below solution worked for me
create a batch file with below
"C:\Users\username\Anaconda3\condabin\activate" && python "script.py" &&
deactivate
Setup task to run this batch file

Categories

Resources