【问题标题】:Why does Task Manager not run some lines of code in script?为什么任务管理器不运行脚本中的某些代码行?
【发布时间】:2015-12-30 15:56:22
【问题描述】:

这里是 Python 新手。

我有一个 Python 脚本来执行一些地理数据库管理(协调/发布版本、压缩等)。我的脚本中有以下代码行:

createLog = open(str(datetime.date.today()) + ".txt", "w")

在脚本的每个步骤中,我使用以下语句添加到文本文件中:

createLog.write("Database connections blocked.\n")

当我在我的 IDE (PyCharm) 中运行脚本时,我得到了想要的结果:每个步骤都写入 .txt 文件的文本文件。当我在任务计划程序中运行它时,没有创建 .txt 文件,因此没有日志。据我所知,其他一切都在运行。我能够跟踪对数据所做的编辑。

我以前在使用任务计划程序时遇到过这样的事情,但过去从未解决过这个问题。

有什么想法吗?

【问题讨论】:

    标签: python scheduled-tasks taskscheduler


    【解决方案1】:

    我认为这是一个工作目录问题。 Python 的 open 函数在当前工作目录中打开一个文件,而不是在与脚本相同的文件夹中。这是一个普遍的误解! (这让我在学习 Python 时困惑了很久......)

    那么什么是工作目录?好吧,引用我的好朋友维基百科:

    在计算中,进程的工作目录是分层文件系统的目录,如果有的话,[1] 与每个进程动态关联。当进程使用简单的文件名或相对路径(而不是由根目录的完整路径指定的文件)引用文件时,该引用被解释为相对于进程的当前工作目录。因此,例如,具有工作目录 /rabbit-shoes 的进程要求创建文件 foo.txt,最终将创建文件 /rabbit-shoes/foo.txt。

    (来源:https://en.wikipedia.org/wiki/Working_directory

    那么这个工作目录是如何选择的呢?

    它是由该进程的父进程选择的!当您从 bash 之类的 shell 运行程序时,shell(父进程)有助于将您正在运行的程序(子进程)的工作目录设置为您当前所在的目录。(即您@的目录987654322@'d to。)

    由于您的 IDE 既智能又实用,它会启动您的 Python 脚本进程并将工作目录设置到脚本本身所在的位置。任务调度程序不太有用......我完全不知道它将工作目录设置为什么。但是,如果您搜索系统,我相信您会发现日志文件位于某个地方!

    【讨论】:

    • 做到了!现在我知道了,你为我省去了很多未来的麻烦。
    • 不仅仅是 Python。我想不出任何常见的编程语言会默认使用二进制文件中的相对路径而不是工作目录中的相对路径。
    • @ShadowRanger 是的,我知道。我认为答案很清楚,这不仅仅是 Python 的事情。但是,如果您认为不清楚,请编辑掉!
    • 任务的工作目录是 C:\Windows\SysWOW64
    • @BradJones:这就是您在 x86-64 Windows 上运行 32 位 Python 所期望的(假设 Windows 安装到 C:)。如果 Python 的比特性与操作系统相匹配,则改为 C:\Windows\System32。您可以随时查看os.getcwd() 以找出一般情况下的工作目录。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多