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)下).
我无法告诉你为什么这样有效,但它解决了我的问题.
您可以使用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)
小智 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)
我通过命令行和任务计划程序通过批处理文件运行脚本。
| 归档时间: |
|
| 查看次数: |
21385 次 |
| 最近记录: |