Python:尝试重新启动脚本无法正常工作

时间:2016-09-28 15:02:43

标签: python exec restart

试图在自己内部重启我的python脚本。 Python 2.7.11

#!/usr/bin/python
# -*- coding: utf-8 -*-
import os
import sys
os.execv(__file__, sys.argv)
sys.exit()

结果:

Traceback (most recent call last):
    File "...\foo.py", line 3, in <module>
        os.execv(__file__, sys.argv)
OSError: [Errno 8] Exec format error

另一个代码:

#!/usr/bin/python
# -*- coding: utf-8 -*-
import os
import sys
os.execv(sys.executable, [sys.executable] + sys.argv)
sys.exit()

结果:

C:\...\python.exe: can't open file 'C:\...\Math': [Errno 2] No such file or directory

该文件的名称为foo.py - 它位于文件夹名称&#39;数学项目&#39;

代码页:852,如有必要。

3 个答案:

答案 0 :(得分:0)

您的错误消息C:\...\python.exe表明您正在运行Windows系统。

您的第一个脚本失败,因为在Windows下,os.execv()不知道如何处理Python脚本,因为第一行(#!/usr/bin/python)未被评估,也没有指向有效的Python解释器在大多数Windows系统上。实际上,os.execv()尝试执行恰好包含Python代码的纯文本文件,但系统并不知道。

您的第二个脚本无法正确检索Python脚本foo.py的文件名。我不清楚为什么会发生这种情况,但错误消息表明目录名Math Project中的空格可能存在问题。

作为一种可能的解决方法,请尝试替换

os.execv(sys.executable, [sys.executable] + sys.argv)

通过以下内容:

os.execv(sys.executable, 
         [sys.executable, os.path.join(sys.path[0], __file__)] + sys.argv[1:])

此行尝试重建Python脚本的正确路径,并将其作为参数传递给Python解释器。

作为旁注:请记住您的脚本正在做什么:它无条件地启动自己的另一个实例。这将导致无限循环,最终会导致系统崩溃。确保您的真实脚本包含中止条件。

编辑:

问题确实存在于路径中的空间,而我提到的解决方法并没有帮助。但是,subprocess模块应该处理这个问题。像这样使用它:

import os
import sys
import subprocess

subprocess.call(["python", os.path.join(sys.path[0], __file__)] + sys.argv[1:])

答案 1 :(得分:0)

尝试一下:

#!/usr/bin/python
# -*- coding: utf-8 -*-
import os
import sys
os.execv(sys.executable, [sys.executable, '"' + sys.argv[0] + '"'] + sys.argv[1:])

双引号可以帮助窗口忽略该空间。

对我有用:)

答案 2 :(得分:0)

#!/usr/bin/python
# -*- coding: utf-8 -*-
import os
import sys
os.execv(sys.executable, [sys.executable, '"' + sys.argv[0] + '"'] + sys.argv[1:])

这对我来说适用于我正在使用Win os