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

时间:2013-08-12 06:28:41

标签: 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下运行它。现在我想要它的另一个原因是因为我想要加载程序。我有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")

但是我快速弹出并关闭窗口说明了这一点 导入错误:没有名为site的模块... 如果我从外部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}")

现在这可行,他用c:\ Python27作为目录打开CMD,但是他没有运行该文件...任何一个命中如何修复它?

1 个答案:

答案 0 :(得分:-1)

使用&#34; raw&#34;字符串,这样你就不需要逃避;我认为反斜杠是破坏你的代码的原因,因为反斜杠被认为是原始字符串中除了之外的转义字符

另外,使用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)。

<强>更新

我刚刚注意到您尝试在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)