2013-08-12 6 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/

Но я не могу заставить его работать ... В моей питон 2.5.5 я могу выполнить скрипт как ExecFile ("C:/скрипт /test.py ")

Проблема заключается в том, что в 2.7.5 имеется модуль comtypes + несколько других. Я не знаю, как установить его для моего 2.5.5, поэтому я пытаюсь запустить отдельный скрипт и запустить его под python27. Теперь еще одна причина, по которой я хочу ее, потому что я хочу снять нагрузку с программы. У меня две тяжелые задачи. Вторая задача - это тот, который нуждается в comptypes, поэтому отправка его в внешнюю оболочку/приложение будет отличным трюком. Есть ли способ сделать это?

Я хотел бы просто напечатать пробег ("C: /Python27/python.exe% C:/скрипт/тест, ру")

Спасибо, до свидания.

Небольшое обновление. Я пытаюсь запустить

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

Но я получаю быстро всплывал и закрыть окно о том, что Import Error: нет модуль с именем сайта ... Это работает, если я бегу от внешней оболочки, но не здесь: (

Так что я попробовал другой подход в этот раз, чтобы добавить модули в питон ... в любом случае, я запускаю это:

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 ... Runtime Error: 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 в качестве каталога, но он не запускает файл ... any hitns, как его исправить?

+0

'python2.7 script.py' должен работать. – Blender

+0

Hay Blender! вы могли бы ввести полный текст кода? atm Я получаю ошибку ... Файл «», строка 1 python2.7 script.py ^ SyntaxError: недействительный синтаксис – Dariusz

+0

С вашей консоли, а не в shebang. – Blender

ответ

-1

Используйте «сырые» строки, чтобы вам не нужно было бежать так же сильно; Я думаю, что обратная косая черта - это то, что нарушало ваш код, поскольку обратная косая черта считается escape-символом , за исключением в необработанных строках.

Также используйте модуль 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

Объяснение в нижнем рейтинге было бы оценено, чтобы я знал, что улучшить с моим ответом или как улучшить будущие ответы. – eestrada

Смежные вопросы