Skip to main content
 首页 » 编程设计

python之使用不同的 python 从 python 运行 python 脚本

2025年05月04日6yjmyzz

我有一个带有 python 2.5.5 的软件。我想发送一个命令,该命令将在 python 2.7.5 中启动一个脚本,然后继续执行该脚本。

我试过用

#!python2.7.5 

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

但是我无法让它工作... 在我的 python 2.5.5 中,我可以执行脚本 execfile("c:/script/test.py")

问题是 2.7.5 有一个模块 comtypes + 其他几个。我不知道如何为我的 2.5.5 安装它,所以我试图启动一个单独的脚本并在 python27 下运行它。现在我想要它的另一个原因是因为我想减轻程序的负担。我有 2 项繁重的任务要执行。第二个任务是需要 comptypes 的任务,因此将其发送到外部 shell/app 将是完美的把戏。有办法吗?

我希望我可以直接输入 run("C:/Python27/python.exe % C:/script/test,py")

谢谢,再见。

小更新。我试着跑

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

但是我得到了一个快速弹出并关闭的窗口说 导入错误:没有名为站点的模块... 如果我从外部 shell 运行但不是从这里运行,这会起作用 :(

所以这次我尝试了另一种方法来向 python 添加模块......无论如何我运行这个:

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 错误而崩溃... 运行时错误: 程序:c:\Pr... R6034 应用程序已尝试错误地加载 C 运行时库。 blablabla....

如何导入?也许如果我可以导入它,我可以直接从我的应用程序运行它,而不是启动单独的 python...

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 如何修复它?

请您参考如下方法:

使用“原始”字符串,这样您就不需要转义太多;我认为反斜杠破坏了您的代码,因为反斜杠在原始字符串中被视为转义字符 except。

此外,使用 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 文档不再在线提供)。

更新:

我刚注意到您试图在 2.5 代码中使用 Python 2.7 库和模块。由于 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)