【问题标题】:print("\r"), not working as intended when running from task schedulerprint("\r"),从任务调度程序运行时未按预期工作
【发布时间】:2019-04-30 22:08:28
【问题描述】:

如果我启动 cmd.exe,进入 python 控制台并测试以下代码,控制台会按预期打印到一行。

如果我通过从任务调度程序启动 python 文件来运行相同的代码,它会每秒在新行上打印出相同的句子。

我希望它的行为与我通过 cmd.exe 运行它的行为相同。(即:仅打印到一行并每次覆盖当前行)

我尝试让任务调度程序在 cmd.exe 中运行 python 脚本,但它似乎只是将 taskeng.exe 作为外壳运行。

代码

import time
reportToCheck = 'Application and Acquisition Loader2'
for x in range(5):
    for y in range(60):
        print("\rscript - %s - not yet complete, checking again in: %02d:%02d" %(reportToCheck, 4-x, 59-y)),
        time.sleep(1)

预期:仅打印到一行

实际(在任务调度程序中运行时):每次打印到新行

【问题讨论】:

  • 任务的可执行参数和命令行参数是什么?看来您正在通过 Python 3 运行任务。
  • 运行 python.exe from cmd.exe(不是 in cmd.exe)没有区别。 CMD shell 简单地通过CreateProcessW 生成进程并等待它退出。唯一的交互,也就是这样说有点牵强,是 Python 继承了 CMD 的控制台而不是分配自己的控制台。

标签: python windows


【解决方案1】:

默认pythonprint行为:

print(*objs, sep=' ', end='\n', file=sys.stdout, flush=False)

如您所见,默认情况下,所有打印调用都会换行。要省略这种行为,您可以自己指定结束符号:

print("\rscript - %s - not yet complete ...", end="")

【讨论】:

  • 谢谢(我忘了说我确实试过了)。我的 python 版本是 2.7.10 并且由于某种原因它不允许“结束”参数。错误是“无效的语法”。您的建议确实适用于我的python(3.6)家庭安装。我尝试在没有括号的情况下调用 print 但仍然没有运气。
  • 你试过from __future__ import print_function吗?
猜你喜欢
  • 1970-01-01
  • 2020-07-20
  • 1970-01-01
  • 2014-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-15
  • 2018-03-21
相关资源
最近更新 更多