2013-08-12 49 views
2

我有一個python 2.5.5的軟件。我想發送一個命令來啓動python 2.7.5中的腳本,然後繼續執行腳本。從python使用不同的python運行python腳本

我嘗試使用

#!python2.7.5 

http://redsymbol.net/articles/env-and-python-scripts-version/

,但我不能得到它的工作... 在我的Python 2.5.5,我可以執行腳本 的execfile(「C:/腳本/test.py「)

問題是,2.7.5有一個模塊comtypes +其他幾個。我不知道如何爲我的2.5.5安裝它,所以我試圖啓動一個單獨的腳本並在python27下運行它。現在我需要它的另一個原因是因爲我想要卸載程序。我有2個繁重的任務要執行。第二項任務是需要comptypes的,因此將它發送到外部shell/app將會完成絕招。有沒有辦法做到這一點?

我希望我可以鍵入run( 「C:/Python27/python.exe%C:/腳本/測試,PY」)

謝謝,再見。

小小的更新。我嘗試運行

import os 
os.system("\"C:\Python27\python.exe\" D:\test\runTest.py") 

但我發現了一個快速的彈出和關閉窗口說 導入錯誤:沒有模塊命名的網站...... 如果我從外殼運行,但不會從這裏這工作: (

所以我已經試過另一種方法這段時間將模塊添加到蟒蛇......在任何情況下,我運行此:

import os 
import sys 
sys.path.append("C:/python27") 
sys.path.append("C:/Python27/libs") 
sys.path.append("C:/Python27/Lib") 
sys.path.append("C:/Python27/Lib/logging") 
sys.path.append("C:/Python27/Lib/site-packages") 
sys.path.append("C:/Python27/Lib/ctypes") 
sys.path.append("C:/Python27/DLLs")  
import PyQt4 
print PyQt4 
import comtypes 
import logging 

,但它使用C錯誤崩潰... 運行時錯誤: PROG ram:c:\ Pr ... R6034 一個應用程序嘗試不正常地加載C運行時庫。 blablabla ....

我該如何導入它?也許如果我可以將其導入,我可以從我的應用程序,而不是單獨的開始蟒蛇直接運行它...

Traceback (most recent call last): 
    File "<string>", line 18, in <module> 
    File "C:\Python27\Lib\site-packages\comtypes\__init__.py", line 22, in <module> 
    from ctypes import * 
    File "C:\Python27\Lib\ctypes\__init__.py", line 10, in <module> 
    from _ctypes import Union, Structure, Array 
ImportError: DLL load failed: A dynamic link library (DLL) initialization routine failed. 

另一個更新isseu

所以我現在這個現在

import os 
os.system("start cmd {D:\test\runTest.py}") 

運行作品,他打開CMD與c:\ Python27作爲目錄,但他不運行該文件...任何hitns如何解決它?

+0

'python2.7 script.py'應該工作。 – Blender

+0

乾草攪拌機!你可以輸入完整的代碼行嗎? atm我得到錯誤...文件「」,第1行 python2.7 script.py ^ SyntaxError:無效的語法 – Dariusz

+0

從您的控制檯,而不是在shebang。 – Blender

回答

-1

使用「原始」字符串,以便您不需要逃脫;我認爲反斜槓是破壞你的代碼的原因,因爲反斜槓被認爲是一個轉義字符,原始字符串中的除外。

此外,使用subprocess模塊。它可以很容易地避免手動製作一個安全的命令字符串(該模塊負責爲您服務)。你所需要做的就是傳遞一個參數列表。然後

您的代碼將是這個樣子:

import subprocess 

proc = subprocess.Popen([r"C:\Python27\python.exe", r"D:\test\runTest.py"]) 

# then either do this 
proc.wait() # wait until the process finishes 

# or this 
while True: 
    # NOTE: do something else here 

    # poll the process until it is done 
    if proc.poll() is not None: 
     break # break out of loop 

見子文檔的Python 2 here。請務必檢查在Python 2.5之後是否添加了一個功能(這些2.5文檔不能在線獲取AFAIK)。

UPDATE:

我剛纔注意到您嘗試使用Python 2.7庫和模塊在2.5代碼。由於2.5之後添加了新功能,因此這可能不起作用。但它讓我想到你怎麼能夠做出2.7的工作。

可能是因爲你的Python2.7安裝找不到它的庫;這可能是爲什麼你會得到錯誤Import Error : no module named site。你可以做一些像上面和之前修改PYTHONPATH環境變量啓動子,像這樣:

import os 
import subprocess 

paths = [r"C:\python27", r"C:\python27\libs", r"C:\python27\Lib\site-packages", r"C:\python27\DLLs"] 
paths += os.environ.get('PYTHONPATH', '').split(os.pathsep) 

env27 = dict(os.environ) 
env27['PYTHONPATH'] = os.pathsep.join(paths) 

proc = subprocess.Popen([r"C:\Python27\python.exe", r"D:\test\runTest.py"], env=env27) 
+0

downvote的解釋將不勝感激,以便我知道什麼用我的答案改進,或者如何改進未來的答案。 – eestrada