首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >通过执行pscp的windows任务计划程序运行python脚本时出现问题

通过执行pscp的windows任务计划程序运行python脚本时出现问题
EN

Stack Overflow用户
提问于 2013-11-25 22:51:18
回答 6查看 35.2K关注 0票数 15

不确定是否有人遇到过这种情况,但我会采纳故障排除和/或替代方法的建议。

我有一台运行多个计划任务的Windows2008服务器。其中一个任务是python脚本,它使用pscp登录到linux机器,检查新文件,如果有新文件,就将它们复制到C:驱动器上的本地目录中。我在脚本中的关键点也添加了一些日志,我使用的是logging.basicConfig(level=DEBUG)

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

现在奇怪的部分来了。如果我从命令行手动运行该脚本,它工作得很好。下载并处理新文件。但是,如果任务调度器运行该脚本,则不会下载任何新文件。该脚本在同一用户下运行,但产生了不同的结果。

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

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

谢谢。

EN

回答 6

Stack Overflow用户

发布于 2017-03-24 00:08:16

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

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

代码语言:javascript
复制
C:\pythonProject\doSomeWork.py

您将输入:

代码语言:javascript
复制
Program/Script: doSomeWork.py

Start in (optional): C:\pythonProject 
票数 15
EN

Stack Overflow用户

发布于 2013-12-06 08:25:41

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

代码语言:javascript
复制
import subprocess

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

在命令行上运行时,将输出以下内容:

代码语言:javascript
复制
Start
First call finished

从任务调度程序运行时,输出为:

代码语言:javascript
复制
Start

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

代码语言:javascript
复制
python test.py >> log.txt

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

票数 4
EN

Stack Overflow用户

发布于 2014-01-14 23:28:07

布拉德的答案是正确的。子进程需要shell上下文才能工作,任务管理器可以在没有shell上下文的情况下启动python。另一种方法是创建一个批处理文件,该批处理文件由调用python、c:\path\to\script.py等的任务调度器启动。唯一的区别是,如果您遇到一个调用os.getcwd()的脚本,您将始终获得脚本所在的根目录,但当您从任务调度器调用cmd时,您将获得其他内容。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20196049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档