2015-09-09 2 views
0

У меня возникли проблемы с запуском скрипта python внутри среды git-bash. Мое приложение работает (на данный момент) из exe-контейнера (py2exe), и ему нужно просто выполнить другой скрипт python, но внутри среды git-bash.Python: запустить скрипт python внутри среды git-bash

Приложение и git-bash.exe находятся в одном каталоге (вся портативная версия git извлекается в эту папку). Второй скрипт, который я хочу запустить, находится в подпапке с именем scripts.

Здесь питон файл, который будет составлен в качестве самостоятельного исполняемого файла: импорт ОС

try: 
    root = os.path.dirname(__file__) 
except: 
    root = os.path.dirname(sys.argv[0]) 

git  = os.path.join(root,"git-bash.exe") 
gitScript = os.path.join(root,"scripts","git_deploy.py") 

Я пытался различные варианты, но без какого-либо успеха:

# 1st try: 
subprocess.Popen(["python", gitScript], executable=git) 

# 2nd try: 
subprocess.Popen(["python %s"%gitScript], shell=True, executable=git) 

# 3rd try: 
subprocess.Popen(["-c", "python", gitScript], executable=git) 

# 4th try: 
subprocess.Popen([git, "python", gitScript]) 

# 5th try: 
subprocess.Popen([git, "-c", "python", gitScript]) 

Любая идея, что я делаете неправильно здесь?

Благодаря

ответ

1

Я дал следующий быстрый тест, и это, кажется, работает. Пара вещей:

  • Вы должны обеспечить C:\Program Files (x86)\Git\bin в PATH среде вашей системы переменной
  • Вы должны исправить пути самостоятельно, чтобы соответствовать конфигурации вашей системы.
  • Любые косые черты в дорожках должны быть сбегающими (т. Е. «Двойные слэши»).
  • Путь к вашим git_deploy.py должен быть заключен в двойных кавычках, а значит, вы будете иметь, чтобы избежать этих цитат с двойным обратным слэшем: \\"<path_to_git_deploy.py>\\"

Пример код:

import os, shlex, subprocess 
from subprocess import Popen, PIPE, STDOUT 

gitScript = 'C:\\Users\\MYUSERNAME\\Downloads\\scripts\\git_deploy.py' 
command = '"C:\\Program Files (x86)\\Git\\bin\\sh.exe" --login -i -c "python \\"' + gitScript + '\\""' 
command_args = shlex.split(command) 
process = Popen(command_args, stdout=PIPE, stderr=STDOUT) 
output, err = process.communicate() 
print output 
+0

THX, но я использую переносимую версию 'Git', поэтому я настраиваю среду для системных переменных на лету .. отлично работает – MagSec