В Python 2.4, как я могу выполнять внешние команды с помощью csh вместо bash? - PullRequest
4 голосов
/ 10 февраля 2009

Без использования нового модуля подпроцесса 2.6, как я могу получить os.popen или os.system для выполнения моих команд, используя tcsh вместо bash? Мне нужно написать несколько сценариев, написанных на tcsh, перед выполнением некоторых других команд, и мне нужно сделать это в python2.4.

EDIT Спасибо за ответы, использующие 'tcsh -c', но я бы хотел избежать этого, потому что я должен избежать безумия. Строка будет интерпретирована bash, а затем интерпретирована tcsh. Я должен сделать что-то вроде:

os.system("tcsh -c '"+re.compile("'").sub(r"""'"'"'""",my_cmd)+"'")

Разве я не могу просто сказать python открыть подпроцесс 'tcsh' вместо подпроцесса 'bash'? Это возможно?

P.S. Я понимаю, что bash - это кошачий мяу, но я работаю в корпоративной среде, и я собираюсь выбрать , а не сражаться в битве между tcsh и bash - большая рыба для жарки.

Ответы [ 3 ]

11 голосов
/ 10 февраля 2009

Просто добавьте префикс оболочки как часть вашей команды. У меня не установлен tcsh, но с zsh:

>>> os.system ("zsh -c 'echo $0'")
zsh
0
5 голосов
/ 10 февраля 2009

Как насчет:

>>> os.system("tcsh your_own_script")

Или просто напишите скрипт и добавьте

#!/bin/tcsh

в начале файла, и пусть ОС позаботится об этом.

0 голосов
/ 10 февраля 2009

Просто установите для используемой оболочки значение tcsh:

>>> os.environ['SHELL'] = 'tcsh'
>>> os.environ['SHELL']
'tcsh'
>>> os.system("echo $SHELL")
tcsh
...