2016-09-28 50 views
0

试图重新启动我的python脚本。 Python的2.7.11Python:试图重新启动脚本不工作

#!/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 - 它在一个文件夹名称'Math Project'

代码页:852,如有必要。

回答

0

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

您的第一个脚本失败,因为在Windows下,os.execv()不知道如何处理Python脚本,因为第一行(#!/usr/bin/python)未被评估,也没有指向大多数Windows系统上的有效Python解释器。实际上,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:]) 
+0

同样的错误。 C:\ ... \ python.exe:无法打开'C:\ ... \ Math'文件:[Errno 2]没有这样的文件或目录 –

+0

编辑过的部分就像一个魅力!谢谢! –