运行python脚本的问题由执行pscp的Windows任务调度程序运行

use*_*061 9 python scp scheduled-tasks

不确定是否有人遇到此问题,但我会采取故障排除和/或替代方法的建议.

我有一台Windows 2008服务器,我正在运行几个计划任务.其中一个任务是python脚本,它使用pscp登录到linux框,检查新文件,如果有新内容,则将它们复制到C:盘上的本地目录.我也在关键点对脚本进行了一些记录,我正在使用logging.basicConfig(level=DEBUG).

我使用变量构建了命令,command = 'pscp -pw xxxx name@ip:/ c:\local_dir'然后subprocess.call(command)用来执行命令.

现在这里是奇怪的部分.如果我从命令行手动运行脚本,它可以正常工作.下载并处理新文件.但是,如果任务计划程序运行该脚本,则不会下载任何新文件.该脚本在同一用户下运行,但产生不同的结果.

根据脚本和linux框创建的日志文件,脚本成功登录到linux框.但是,尽管存在新文件,但不会下载任何文件.同样,当我通过命令行运行它时,会下载文件.

有任何想法吗?建议,替代方法?

谢谢.

小智 13

尝试在Linux VM上打开MS Access数据库时遇到了同样的问题.在Windows 7命令提示符下运行脚本有效但在任务计划程序中运行它没有.使用任务计划程序,它将找到数据库并验证它是否存在但不会返回其中的表.

解决方案是让Task Scheduler运行cmd作为Program/Script,参数为/ c python C:\ path\to\script.py(在Add arguments(optional)下).

我无法告诉你为什么这样有效,但它解决了我的问题.

  • 这对我也不起作用.我尝试的每一件事,当我按下Run时它什么也没做.> :( (5认同)

Erk*_*iev 8

您可以使用Windows Task Scheduler,但请确保已填写“可选”字段“开始于”。

在Task Scheduler应用程序中,添加一个操作,该操作指定要运行“ doSomeWork”的python文件,并使用包含该文件的目录填写“开始于(可选)输入”。例如,如果您在以下位置有python文件:

C:\pythonProject\doSomeWork.py
Run Code Online (Sandbox Code Playgroud)

您将输入:

Program/Script: doSomeWork.py

Start in (optional): C:\pythonProject 
Run Code Online (Sandbox Code Playgroud)

  • 我认为这是最好的答案。谢谢。 (2认同)

小智 5

我有类似的问题。在测试中,我发现任何类型的子进程调用都会在任务调度程序中运行时停止 python 脚本,但在命令行上运行时工作正常。

import subprocess

print('Start')
test = subprocess.check_output(["dir"], shell=True)
print('First call finished')
Run Code Online (Sandbox Code Playgroud)

当在命令行上运行时,输出:

Start
First call finished
Run Code Online (Sandbox Code Playgroud)

从任务计划程序运行时,输出为:

Start
Run Code Online (Sandbox Code Playgroud)

为了从任务调度程序获取输出,我从批处理文件运行 python 脚本,如下所示:

python test.py >> log.txt
Run Code Online (Sandbox Code Playgroud)

我通过命令行和任务计划程序通过批处理文件运行脚本。