2016-03-09 25 views
0

我需要實現一個可以根據需要重新啓動Python腳本的函數。主環路不可接受。 Python可執行文件和腳本都包含空格。如何在Windows中使用路徑中的空格重新啓動Python 3.5腳本

我已經試過:

python = sys.executable 
os.execl(python, python, * sys.argv) 

失敗,因爲路徑包含空格:C:\Program: can't open file 'Files': [Errno 2] No such file or directory

python = '"' + sys.executable + '"' 
os.execl(python, python, * sys.argv) 

它失敗

OSError: [Errno 22] Invalid argument 

簡單:

os.execl(python, python) 

也失敗了。

我也試過:

subprocess.run([python]) 

而失敗:PermissionError: [WinError 5] Access is denied

subprocess.run(['"' + python + '"']) 
subprocess.run(['""' + python + '""']) 

也失敗了......

謝謝您的幫助

+0

請在問題中添加什麼'sys.executable'包含 –

+0

我的意思是請添加'print(repr(sys.executable))' –

回答

0

聽起來髒!

在這一行,我不知道爲什麼你送蟒兩次execl

os.execl(python, python, * sys.argv) 

試試這個

os.execl(sys.executable, *sys.argv) 
+0

這是一個摘錄在這裏:https://www.daniweb.com /編程/軟件開發/代碼/ 260268 /重新啓動你的python程序- 我試過你的建議,但它只是打開一個新的python外殼,什麼也不做。 – sixtstorm1

0

與POPEN解決它:

python = sys.executable 
    script = os.path.realpath(__file__) 
    subprocess.Popen([python, script]) 
0

如果你最終需要使用os.execl,那麼下面應該可以工作

python = sys.executable 
os.execl(python, '"' + python + '"', *sys.argv) 

引號應解決由於路徑中的任何空格造成的任何問題。

相關問題