Форум сайта python.su
orionТак запусти его перед выполнением твоего питоновского скрипта, нафига такой изврат творить? =)
Но перед тем, как работать, мне нужно установить этот “нехороший” батник setenv.bat.
Офлайн
orionМожет и нам покажешь что же там такое не переносимое написано =)
Но, опять же, его я тоже не могу нормально использовать, так как не знаю, как ту инфу из батника (помнишь, я тебе это описывал на pydev.ru) перенести в мой скрипт.
Офлайн
slivlenДа пожалуйста:
Может и нам покажешь что же там такое не переносимое написано smile
Офлайн
И что тут непереносимо? =)
Почитай эти доки, думаю это прояснит как на Python переписать:
http://weblogs.asp.net/lorenh/archive/2006/03/24/441004.aspx
http://www.ss64.com/nt/set.html
Н-р первая строка заменяется на такое:
# SET SK_PYTHON_HOME=%~dp0%
os.environ['SK_PYTHON_HOME'] = os.path.dirname(sys.argv[0])
Офлайн
Нет, не прояснило. Ты можешь конкретно дать пример?
Офлайн
slivlen, ты не совсем прояснил ситуацию. Я работаю с модулем popen:
step1 = subprocess.Popen('Create.py', shell = True,
stdout = subprocess.PIPE,
stdin = subprocess.PIPE,
cwd = ‘C:\Program Files\Program\Training’,
env =
)
Видишь, именно в нём мне нужно задать этот env. Насколько я понял, в виде приблизительно такого списка:
env = {'PATH':'C:\Program Files\Sk\Beal\bin; C:\Program Files\Sk\Beal\Python;C:\Program Files\Sk\Beal\Python\LIBS;C:\Program Files\Sk\Beal\Python\DLLS;C:\Program Files\Sk\Beal\Python\LIBS;C:\Program Files\Sk\Beal\Python\Apps\Interactive',
‘PYTHONPATH’:'C:\Program Files\Sk\Beal\bin;C:\Program Files\Sk\Beal\Python\LIBS;C:\Program Files\Sk\Beal\Python\DLLS;C:\Program Files\Sk\Beal\Python\LIBS;C:\Program Files\Sk\Beal\Python\Apps\Interactive'}
Но, почему-то это не работает, то есть пути не прописываются. Как мне это сделать?
Отредактировано (Окт. 2, 2008 16:38:38)
Офлайн
У меня все работает:
#coding=utf-8
import subprocess
#словарь с переменными окружения
env = {'PATH':'C:\Program Files\Sk\Beal\bin; C:\Program Files\Sk\Beal\Python;C:\Program Files\Sk\Beal\Python\LIBS;C:\Program Files\Sk\Beal\Python\DLLS;C:\Program Files\Sk\Beal\Python\LIBS;C:\Program Files\Sk\Beal\Python\Apps\Interactive',
'PYTHONPATH':'C:\Program Files\Sk\Beal\bin;C:\Program Files\Sk\Beal\Python\LIBS;C:\Program Files\Sk\Beal\Python\DLLS;C:\Program Files\Sk\Beal\Python\LIBS;C:\Program Files\Sk\Beal\Python\Apps\Interactive'}
#выполняем скрипт, с установленными переменными окружения
step1 = subprocess.Popen('Create.py', shell = True,
stdout = subprocess.PIPE,
stdin = subprocess.PIPE,
env = env
).communicate()
#coding=utf-8
import os
#сохраним в файл переменные окружения PATH и PYTHONPATH
file('env.txt','w').write( os.getenv('PATH') + '\r\n' + os.getenv('PYTHONPATH') )
Отредактировано (Окт. 2, 2008 16:58:51)
Офлайн
Нашёл свою ошибку. Env всё таки поставил, но получается так, что скрипт, который я запускаю через subprocess, в свою очередь, сам запускает процесс. Как до него дотянуться, чтобы контактировать, не знаю.
Офлайн
orionPopen создает дочерний процесс и через pipe связывается с его stdin, stdout и stderr, а дочерний процесс наследует окружение родителя. Родителем собственно будет процесс, в котором работает твой скрипт.
slivlen, ты не совсем прояснил ситуацию.
orionУ тебя shell=True, поэтому сначала запускается шелл, который в свою очередь форкается и запускает на выполнение твой скрипт.
Нашёл свою ошибку. Env всё таки поставил, но получается так, что скрипт, который я запускаю через subprocess, в свою очередь, сам запускает процесс. Как до него дотянуться, чтобы контактировать, не знаю.
Офлайн
slivlenТак если я использую shell=False, у меня генерит error. То есть другого варианта у меня не имеется :(.
У тебя shell=True, поэтому сначала запускается шелл, который в свою очередь форкается и запускает на выполнение твой скрипт.
Офлайн