Получить CLASSPATH, созданный в файле .bat из python - PullRequest
0 голосов
/ 16 декабря 2011

Java-проект, над которым я работаю, содержит файл .bat и файл .sh, которые создают CLASSPATH для запуска проекта. (.bat для окон и .sh для остальных).

Теперь я пишу скрипт на python, которому нужен доступ к пути к классам, созданному этими скриптами, от .sh для Linux и от .bat для Windows.

В настоящее время я делаю это для Linux:

Popen(['bash', '-c', '. mkcp.sh && echo $CLASSPATH'], stdout=sp.PIPE).communicate()[0].strip()

И я не могу найти эквивалентный способ сделать это в Windows. До сих пор я придумал это

check_output(['cmd', '/c', 'call mkcp.bat && echo %CLASSPATH%'])

Но это помещает все команды из файла mkcp.bat в стандартный вывод. (Добавление @echo off к этому файлу не вариант для меня, то есть я не могу его изменить). Помимо этой проблемы, основная проблема заключается в том, что %CLASSPATH% заменяется значением до запуска пакетного файла, а это не то, что мне нужно.

Другой подход, о котором я подумал, состоял в том, чтобы создать объект Popen, как указано выше, и запустить пакетный файл, и если я смогу получить доступ к среде этого процесса, я смогу получить то, что хочу. Но из документации Попена это не представляется возможным.

Есть идеи, как этого добиться?

1 Ответ

1 голос
/ 16 декабря 2011

Самый простой способ - создать командный файл с соответствующими командами. Таким образом, переменная не раскрывается, пока CMD не обработает соответствующую строку. Также используйте @echo off, чтобы отключить эхо:

@echo off
call mkcp.bat
echo %CLASSPATH%

Тогда просто вызовите этот пакетный файл из кода Python.

Если вы хотите сделать это без промежуточного пакетного файла, попробуйте:

check_output(['cmd', '/V:ON', '/c', '"@echo off && call mkcp.bat && echo !CLASSPATH!"'])

/V:ON включает отложенное расширение переменных окружения, когда вместо замены %.

используется !.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...