Python:尝试重新启动脚本无效
Python: Trying to restart script not working
试图在自身内部重新启动我的 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 - 它位于文件夹名称 'Math Project'
中
代码页:852,如有必要。
您的错误消息 C:\...\python.exe
表明您是 运行 一个 Windows 系统。
您的第一个脚本失败,因为在 Windows 下,os.execv()
不知道如何处理 Python 脚本,因为第一行 (#!/usr/bin/python
) 未被评估或它是否指向大多数 Windows 系统上的有效 Python 解释器。实际上,os.execv()
尝试执行一个纯文本文件,该文件恰好包含 Python 代码,但系统不知道。
您的第二个脚本无法正确检索您的 Python 脚本 foo.py
的文件名。我不清楚为什么会这样,但错误消息表明您的目录名称 Math Project
中的 space 可能有问题。
作为一种可能的解决方法,请尝试替换行
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 解释器。
附带说明:请记住您的脚本在做什么:它无条件地启动其自身的另一个实例。这将导致无限循环,最终会使您的系统崩溃。确保您的真实脚本包含中止条件。
编辑:
确实,问题在于路径中的 space,我提到的解决方法无济于事。但是,subprocess
模块应该处理这个问题。像这样使用它:
import os
import sys
import subprocess
subprocess.call(["python", os.path.join(sys.path[0], __file__)] + sys.argv[1:])
试试这个:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import os
import sys
os.execv(sys.executable, [sys.executable, '"' + sys.argv[0] + '"'] + sys.argv[1:])
双引号可以帮助 windows 忽略 space。
它对我有用:)
试图在自身内部重新启动我的 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 - 它位于文件夹名称 'Math Project'
中代码页:852,如有必要。
您的错误消息 C:\...\python.exe
表明您是 运行 一个 Windows 系统。
您的第一个脚本失败,因为在 Windows 下,os.execv()
不知道如何处理 Python 脚本,因为第一行 (#!/usr/bin/python
) 未被评估或它是否指向大多数 Windows 系统上的有效 Python 解释器。实际上,os.execv()
尝试执行一个纯文本文件,该文件恰好包含 Python 代码,但系统不知道。
您的第二个脚本无法正确检索您的 Python 脚本 foo.py
的文件名。我不清楚为什么会这样,但错误消息表明您的目录名称 Math Project
中的 space 可能有问题。
作为一种可能的解决方法,请尝试替换行
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 解释器。
附带说明:请记住您的脚本在做什么:它无条件地启动其自身的另一个实例。这将导致无限循环,最终会使您的系统崩溃。确保您的真实脚本包含中止条件。
编辑:
确实,问题在于路径中的 space,我提到的解决方法无济于事。但是,subprocess
模块应该处理这个问题。像这样使用它:
import os
import sys
import subprocess
subprocess.call(["python", os.path.join(sys.path[0], __file__)] + sys.argv[1:])
试试这个:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import os
import sys
os.execv(sys.executable, [sys.executable, '"' + sys.argv[0] + '"'] + sys.argv[1:])
双引号可以帮助 windows 忽略 space。
它对我有用:)