通过批处理文件和命令行运行时,Python脚本的行为不同。

4

我有一个需要通过批处理文件运行的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文件,我会导入这个文件(如果你想知道原因,请查看这里)。就像我说的,在 cmd 中运行时一切正常。然而,在使用批处理文件时,while循环会无限运行(或者至少2分钟,当在cmd中运行时只触发一次except)。这是奇怪的。我已经参考了 这里这里,以及这个问题,但都没有找到解决方法。以下是批处理文件。
start Y:\Admin\Anaconda\python.exe "Y:\Projects\Advent - Overhead Projects\Copy - ADV001 - CR Records Management - Copy\Python\CRWizard.py" 

我已经尝试将那个确切的命令粘贴到cmd中,它可以正常工作,但批处理文件无法正常工作。提前致谢。


2
CRFOLDER是什么?在批处理文件和直接运行时,它是否指向相同的位置? - BrenBarn
这两个运行程序的CRFOLDER值是什么?为什么你使用startfile而不是例如subprocess.call - alko
我已经更新了问题,CRFOLDER是我所有文件所在的路径。我让它打印了os.path.join(CRFOLDER,"clogger.exe")os.path.join(CRFOLDER,"CRPYLog.py")的值,它们都似乎是正确的。 - wnnmaw
@alko,我认为startfile是以最干净的方式打开文件到它们默认程序的方法,但我怀疑这并没有什么神圣不可侵犯的地方。 - wnnmaw
@latheiere,您所说的“登录”是什么意思? - wnnmaw
显示剩余3条评论
2个回答

2

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

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


0

你不需要输入start命令。请参见this。只需删除start命令即可。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接