【问题标题】:Python script is behaving differently when run through batch file and cmd line通过批处理文件和 cmd 行运行时,Python 脚本的行为有所不同
【发布时间】:2013-12-16 20:20:06
【问题描述】:

我有一个需要使用批处理文件运行的 Python 脚本,但我一直在使用 cmd 对其进行测试。通过cmd运行时,它工作正常。但是,脚本在通过批处理文件运行时似乎表现不同。我已经隔离了似乎是问题的代码部分:

CRFOLDER = "some path to all my files"

isReady = False
os.startfile(os.path.join(CRFOLDER,"CLogger.exe"))

while not isReady:

    try:
        open(os.path.join(CRFOLDER,"CRPYLog.py"))
        isReady = True
    except:
        print "Not ready yet"
        time.sleep(0.25)

import CRPYLog as PyLog

这段代码调用了一个可执行文件,该可执行文件创建了一个 Python 文件,然后我将其导入(如果您对原因感到好奇,请查看 here)。正如我所说,这在通过 cmd 运行时工作正常。但是,当我使用批处理文件时,while 循环会无限运行(或者至少持续 2 分钟,当通过 cmd 运行时,它只会碰到一次except)。这很奇怪。我检查了thisthisthis 问题,但没有运气。批处理文件如下。

start Y:\Admin\Anaconda\python.exe "Y:\Projects\Advent - Overhead Projects\Copy - ADV001 - CR Records Management - Copy\Python\CRWizard.py" 

我已尝试将确切的命令粘贴到 cmd 中,它工作正常,但批处理文件没有。提前致谢

【问题讨论】:

  • 什么是CRFOLDER?是否在两种情况下都指向相同的位置(批处理文件并直接运行)?
  • 这两次运行的 CRFOLDER 值是多少?您使用 startfile 代替 subprocess.call 的原因是什么?
  • 我已经更新了问题,CRFOLDER 是我所有文件所在的路径。我让它打印出os.path.join(CRFOLDER,"clogger.exe")os.path.join(CRFOLDER,"CRPYLog.py") 的值,它们看起来都是正确的
  • @alko,我认为startfile 是在默认程序中打开文件的最简洁方式,但我怀疑它有什么神圣之处
  • 你的CLogger.exe可以记录创建文件的绝对位置吗?

标签: python windows batch-file cmd


【解决方案1】:

您的批处理文件可能正在使用 Windows 本机调用 (os.startfile) 运行可执行文件,因此设置了一些默认值(当前文件夹),强制可执行文件在与预期 CRFOLDER 不同的文件夹中创建结果文件。

我建议您明确指定您需要在哪个目录中创建此.py 文件,例如,作为一个灵活的解决方案,作为可执行文件的参数。

【讨论】:

    【解决方案2】:

    您不必为此键入 start 命令。见this。只需删除启动命令即可。

    Y:\Admin\Anaconda\python.exe "Y:\Projects\Advent - Overhead Projects\Copy - ADV001 - CR Records Management - Copy\Python\CRWizard.py"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-08
      • 2017-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-12
      • 2023-03-20
      相关资源
      最近更新 更多