2016-09-28 22 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ある - それは中ですフォルダ名「数学プロジェクト」

コードページ:852、必要に応じて。

答えて

0

エラーメッセージC:\...\python.exeは、Windowsシステムを実行していることを示しています。

Windowsの場合、os.execv()は、最初の行(#!/usr/bin/python)が評価されず、ほとんどのWindowsシステムで有効なPythonインタプリタを指していないため、Pythonスクリプトの処理方法がわからないため失敗します。事実、os.execv()は、Pythonコードを含むプレーンテキストファイルを実行しようとしますが、システムはそれを認識しません。

2番目のスクリプトが、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インタプリタに渡します。

注:スクリプトが実行していることに注意してください:無条件に別のインスタンスを開始しています。これにより無限ループが発生し、最終的にシステムがダウンすることになります。実際のスクリプトに中止条件が含まれていることを確認してください。

EDIT:

問題は、パスにスペースで、実際に、ある、と私が述べた問題を回避するには、助けにはなりません。しかし、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

編集した部分は魅力的です!ありがとうございました! –

関連する問題