不确定是否有人遇到过这种情况,但我会采纳故障排除和/或替代方法的建议。
我有一台运行多个计划任务的Windows2008服务器。其中一个任务是python脚本,它使用pscp登录到linux机器,检查新文件,如果有新文件,就将它们复制到C:驱动器上的本地目录中。我在脚本中的关键点也添加了一些日志,我使用的是logging.basicConfig(level=DEBUG)
。
我使用变量command = 'pscp -pw xxxx name@ip:/ c:\local_dir'
构建命令,然后使用subprocess.call(command)
执行该命令。
现在奇怪的部分来了。如果我从命令行手动运行该脚本,它工作得很好。下载并处理新文件。但是,如果任务调度器运行该脚本,则不会下载任何新文件。该脚本在同一用户下运行,但产生了不同的结果。
根据脚本在linux机器上创建的日志文件,脚本成功登录linux机器。但是,即使有新文件,也不会下载任何文件。同样,当我通过命令行运行它时,会下载文件。
有什么想法吗?建议,替代方法?
谢谢。
发布于 2017-03-24 00:08:16
您可以使用windows任务计划程序,但请确保填写了“可选”字段“开始于”。
在Task Scheduler应用程序中,添加一个指定要运行"doSomeWork“的python文件的操作,并使用包含该文件的目录填写Start In (可选)输入。例如,如果您在以下位置有一个python文件:
C:\pythonProject\doSomeWork.py
您将输入:
Program/Script: doSomeWork.py
Start in (optional): C:\pythonProject
发布于 2013-12-06 08:25:41
我也有类似的问题。在测试中,我发现使用subprocess的任何类型的调用都会在任务调度程序中运行时停止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
我通过命令行上的批处理文件和任务调度程序运行该脚本。
发布于 2014-01-14 23:28:07
布拉德的答案是正确的。子进程需要shell上下文才能工作,任务管理器可以在没有shell上下文的情况下启动python。另一种方法是创建一个批处理文件,该批处理文件由调用python、c:\path\to\script.py等的任务调度器启动。唯一的区别是,如果您遇到一个调用os.getcwd()的脚本,您将始终获得脚本所在的根目录,但当您从任务调度器调用cmd时,您将获得其他内容。
https://stackoverflow.com/questions/20196049
复制相似问题