Problemas al ejecutar el script de Python por el progtwigdor de tareas de Windows que hace pscp

No estoy seguro si alguien se ha encontrado con esto, pero recibiré sugerencias para solucionar problemas y / o métodos alternativos.

Tengo un servidor Windows 2008 en el que estoy ejecutando varias tareas progtwigdas. Una de esas tareas es una secuencia de comandos de python que usa pscp para iniciar sesión en un cuadro de Linux, busca nuevos archivos y, si hay algo nuevo, los copia a un directorio local en la unidad C :. También puse algo de inicio de sesión en el script en puntos clave y estoy usando logging.basicConfig(level=DEBUG) .

Construí el comando usando una variable, command = 'pscp -pw xxxx name@ip:/ c:\local_dir' y luego uso subprocess.call(command) para ejecutar el comando.

Ahora aquí está la parte rara. Si ejecuto el script manualmente desde la línea de comandos, funciona bien. Los nuevos archivos son descargados y procesados. Sin embargo, si el Progtwigdor de tareas ejecuta el script, no se descargarán nuevos archivos. La secuencia de comandos se ejecuta bajo el mismo usuario, pero aún así produce resultados diferentes.

De acuerdo con los archivos de registro creados por el script y en el cuadro de linux, el script inicia sesión con éxito en el cuadro de linux. Sin embargo, no se descargan archivos a pesar de que hay nuevos archivos. Una vez más, cuando lo ejecuto a través de la línea de comandos, los archivos se descargan.

    ¿Algunas ideas? ¿Sugerencias, métodos alternativos?

    Gracias.

    Tuve el mismo problema al intentar abrir una base de datos de MS Access en una máquina virtual de Linux. La ejecución del script en el símbolo del sistema de Windows 7 funcionó pero ejecutarlo en el Progtwigdor de tareas no funcionó. Con el Progtwigdor de tareas encontraría la base de datos y verificaría que existía, pero no devolvería las tablas que contenía.

    La solución fue hacer que el Progtwigdor de tareas ejecutara cmd como el Progtwig / Script con los argumentos / c python C: \ ruta \ a \ script.py (en Agregar argumentos (opcional)).

    No puedo decir por qué esto funciona, pero resolvió mi problema.

    Puede usar el Progtwigdor de tareas de Windows, pero asegúrese de que el campo “Opcional” de “Opcional” esté completado.

    En la aplicación Progtwigdor de tareas, agregue una acción que especifique su archivo de python para ejecutar “doSomeWork” y complete la entrada de inicio en (opcional) con el directorio que contiene el archivo. Así, por ejemplo, si tiene un archivo de python en:

     C:\pythonProject\doSomeWork.py 

    Usted ingresaría:

     Program/Script: doSomeWork.py Start in (optional): C:\pythonProject 

    Estoy teniendo un problema similar. En las pruebas, descubrí que cualquier tipo de llamada con subproceso detiene la secuencia de comandos de Python cuando se ejecuta en el progtwigdor de tareas, pero funciona bien cuando se ejecuta en la línea de comandos.

     import subprocess print('Start') test = subprocess.check_output(["dir"], shell=True) print('First call finished') 

    Cuando se ejecuta en la línea de comandos, esto genera:

     Start First call finished 

    Cuando se ejecuta desde el progtwigdor de tareas, la salida es:

     Start 

    Para obtener la salida del progtwigdor de tareas, ejecuto el script de Python desde un archivo por lotes de la siguiente manera:

     python test.py >> log.txt 

    Ejecuto el script a través del archivo por lotes tanto en la línea de comandos como a través del progtwigdor de tareas.

    La respuesta de Brad es correcta. Subproceso necesita que el contexto de shell funcione y el administrador de tareas puede iniciar Python sin eso. Otra forma de hacerlo es crear un archivo por lotes que se inicia con el progtwigdor de tareas que llama a python c: \ ruta \ a \ script.py, etc. La única diferencia es que si se ejecuta un script que tiene una llamada Para os.getcwd () siempre obtendrá la raíz donde está el script, pero obtendrá otra cosa cuando realice la llamada a cmd desde el progtwigdor de tareas.

    Última edición – inicio

    Después de los experimentos … Si pones la ruta completa al progtwig de Python, funciona sin los privilegios más altos (como administrador). Significado de la configuración de tareas como esta:

     program: "C:\Program Files\Python37\python.exe" arguments: "D:\folder\folder\python script.py" 

    No tengo idea de por qué, pero funciona incluso si el script utiliza subprocesos y subprocesos múltiples.

    Última edición – final

    Lo que hice fue cambiar la configuración de la tarea: marcado Run with highest privileges . Y la tarea comenzó a funcionar perfectamente mientras ejecutaba python [script path] . Pero tenga en cuenta que el título contiene “Administrador:” al principio … siempre …

    PD Gracias chicos por señalar que el subproceso es un problema. Me hizo pensar en la configuración de tareas. Tuve un problema similar cuando una secuencia de comandos se está ejecutando desde el Progtwigdor de tareas de Windows y otra no. Ejecutar cmd con python [script path] no me funcionó en Windows 8.1 Embedded x64. No estoy seguro de por qué. Probablemente debido a la necesidad de tener espacios en ruta y problema con comillas. Espero que mi respuesta ayude a alguien. 😉

    Cree un archivo por lotes, agregue su secuencia de comandos de Python en su archivo por lotes y luego programe ese archivo por lotes .it funcionará. Ejemplo: suponga que su script de python está en la carpeta c: \ abhishek \ script \ merun.py primero tiene que ir al directorio con el comando cd. Así su archivo por lotes sería como:

    cd c: \ abhishek \ script python merun.py

    funciona para mi