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

  • 本文关键字:python 脚本 运行 python env
  • 更新时间 :
  • 英文 :


我有一个带有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下运行它。现在我想要它的另一个原因是因为我想取消加载程序。我有两项繁重的任务要做。第二个任务是需要comptype的任务,所以将其发送到外部shell/应用程序将是一个完美的技巧。有办法做到吗?

我希望我能键入run("C:\Python27/python.exe%C:/script/test,py")

谢谢,再见。

小更新。我试着运行

import os 
os.system(""C:Python27python.exe" D:testrunTest.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运行库。布拉布拉。。。。

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

Traceback (most recent call last):
  File "<string>", line 18, in <module>
  File "C:Python27Libsite-packagescomtypes__init__.py", line 22, in <module>
    from ctypes import *
  File "C:Python27Libctypes__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:testrunTest.py}")

现在这起作用了,他用c:\Python27作为目录打开CMD,但他没有运行文件。。。有什么问题怎么解决?

使用"原始"字符串,这样就不需要进行太多转义;我认为反斜杠是破坏代码的原因,因为反斜杠被认为是原始字符串中除之外的转义符

另外,使用subprocess模块。它可以很容易地避免手动生成安全的命令字符串(模块会为您处理)。您所需要做的就是向它传递一个参数列表。

然后你的代码看起来像这样:

import subprocess 
proc = subprocess.Popen([r"C:Python27python.exe", r"D:testrunTest.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的子流程文档。请务必检查Python 2.5之后是否添加了功能(AFAIK不再提供2.5文档)。

更新:

我刚刚注意到您尝试在2.5代码中使用Python2.7库和模块。这可能不会起作用,因为在2.5之后添加了新功能。但它让我思考如何让2.7发挥作用。

可能是您的Python2.7安装找不到它的库;这可能就是您得到错误Import Error : no module named site的原因。您可以执行类似于上面的操作,并在启动子流程之前修改PYTHONPATH环境变量,如下所示:

import os
import subprocess 
paths = [r"C:python27", r"C:python27libs", r"C:python27Libsite-packages", r"C:python27DLLs"]
paths += os.environ.get('PYTHONPATH', '').split(os.pathsep)
env27 = dict(os.environ)
env27['PYTHONPATH'] = os.pathsep.join(paths)
proc = subprocess.Popen([r"C:Python27python.exe", r"D:testrunTest.py"], env=env27)

相关内容

  • 没有找到相关文章

最新更新