执行pscp的windows任务调度程序运行python脚本时出现的问题

2024-05-06 11:03:51 发布

您现在位置:Python中文网/ 问答频道 /正文

不确定是否有人遇到过这种情况,但我将为故障排除和/或其他方法提供建议。

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

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

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

根据脚本创建的日志文件,在linux下,脚本成功地登录到linux下。但是,即使有新文件,也不会下载任何文件。同样,当我通过命令行运行它时,文件会被下载。

有什么想法吗?建议,替代方法?

谢谢。


Tags: 文件方法命令行命令服务器目录脚本linux
3条回答

在Linux虚拟机上打开MS-Access数据库时,我遇到了同样的问题。在Windows7命令提示符下运行脚本是可行的,但在任务调度程序中运行却不行。使用任务调度程序,它会找到数据库并验证它是否存在,但不会返回其中的表。

解决方案是让Task Scheduler以带有参数的程序/脚本的形式运行(在Add arguments(可选)下)。

我不能告诉你为什么这样做,但它解决了我的问题。

我也有类似的问题。在测试中,我发现在任务调度器中运行时,使用子进程的任何类型的调用都会停止python脚本,但在命令行上运行时运行良好。

import subprocess

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

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

Start
First call finished

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

Start

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

python test.py >> log.txt

我在命令行和任务调度程序中通过批处理文件运行脚本。

您可以使用windows任务计划程序,但请确保填写了“可选”字段“开始时间”。

在任务调度器应用程序中,添加一个操作,指定要运行“doSomeWork”的python文件,并用包含该文件的目录填写Start-In(可选)输入。。例如,如果您有一个python文件在:

C:\pythonProject\doSomeWork.py

您可以输入:

Program/Script: doSomeWork.py

Start in (optional): C:\pythonProject 

相关问题 更多 >