У меня возникла проблема с преобразованием одного из сценариев моей компании из csh в Python. Сценарий csh вызывает команду aliased, но когда я вызываю ту же команду aliased через os.system(), она не работает.Преодоление ограничения os.system() в Python 2.3
Итак, если foo
является алиасом команды:
CSH Script (это работает, выполняет Foo):
foo <argument>
Python (это не работает, ошибка утверждает, Foo является неизвестная команда):
os.system("foo <argument>")
Я полагаю, что там должна быть какая-то переключение контекста происходит, когда я выполнить сценарий Python, который вызывает Python не имеют доступа к псевдонимами, созданных в т он раковина. После прочтения документации кажется, что os.system
устарел в пользу subprocess
и что subprocess
имеет параметр shell
, который мог бы мне помочь ... проблема в том, что я застрял с использованием Python 2.3 и subprocess
isn ' t до версии 2.4.
У меня возникла идея реплицировать псевдоним в python. Так, например, скажем, foo
был псевдоним cp
.
CSH:
alias foo cp
foo file1 file2
Python:
os.system("alias foo cp")
os.system("foo file1 file2")
Нет кости ... ошибки здесь также:
sh: line 0: alias: foo: not found
sh: line 0: alias: cp: not found
sh: foo: command not found
Моя последняя попытка рва, чтобы взять несколько строк код, который использует foo
и помещает их в свой собственный скрипт CSH, который будет вызывать Python. Но если есть способ сделать эту работу, не прибегая к этому, я хотел бы узнать об этом.
Заранее спасибо!
«Что заставило вас думать, что os.system будет использовать csh?» Невежество? :) Я думал, что он просто передал строку в командной строке. Спасибо за ответ. Это устраняет проблему, с которой я столкнулся, но, к сожалению, поскольку каждый вызов выполняется в своей собственной подоболочке, мне придется найти другое решение. Характер моей команды 'foo' таков, что он загружает кучу других вещей, которые будут использоваться вашим скриптом, поэтому, если этот материал будет потерян, как только закончится команда os.system, это не сработает. –
Он передает материал в командной строке. Это просто, что нет единственного * типа * командной строки;) Если он загружает другие вещи для последующих команд, и вы конвертируете все это в python, возможно, вы должны сначала перенести этот материал на python;) –