Как написать скрипт на python, который может открывать новый терминал Linux и автоматически выполнять исходный код

Мне нужно написать скрипт на python (или bash), который:

  • откройте новый терминал Linux с несколькими вкладками
  • выполните команду «source myfile.csh» на каждой вкладке

Я пробовал что-то вроде этого:

 os.system("gnome-terminal --tab --working-directory=/repo/ -e 'source myfile.csh' ")

но это не сработало (например, файл не был найден, хотя я находился в правильном каталоге или не мог открыть файл .csh и т. д.)

Я также пробовал несколько других вариантов, но не нашел подходящего решения для своей проблемы.

Я не знаю, почему я не могу сделать простое "открыть новый терминал, написать команду и выполнить ее"

Может есть какое-то простое решение БЕЗ установки какого либо нового софта (рута у меня нет)?


person Legut    schedule 02.03.2017    source источник
comment
Любое сообщение об ошибке при выполнении показанной команды?   -  person languitar    schedule 02.03.2017
comment
работает ли эта команда при вставке в терминал?   -  person Jean-François Fabre    schedule 02.03.2017
comment
Произошла ошибка при создании дочернего процесса для этого терминала Не удалось выполнить источник дочернего процесса (Нет такого файла или каталога) @languitar   -  person Legut    schedule 02.03.2017
comment
Маскировать это как вопрос Python крайне неясно. Если вы можете запустить его из командной строки, вы можете запустить его из Python (или Ruby, или C, или...)   -  person tripleee    schedule 02.03.2017
comment
@tripleee Вы пометили мой вопрос как дубликат, но тема, предложенная вами в качестве ответа, совсем не решила мою проблему. Я также удалил тег python   -  person Legut    schedule 02.03.2017
comment
Какую конкретную проблему вы пытаетесь решить здесь? Непонимание того, что вам нужно запустить tcsh или csh, чтобы source заработало, кажется хорошей догадкой о том, как свести проблему к MCVE, и любая оставшаяся проблема кажется как тангенциальная csh-только проблема, которая, вероятно, должна быть новым вопросом. Если вы можете уточнить свой вопрос, чтобы изменить его область применения для более простой проблемы с одним прямым ответом, я буду рад снять флаг дублирования (хотя вполне вероятно, что тогда это будет дубликат другого существующего вопроса).   -  person tripleee    schedule 02.03.2017
comment
Если ваша оболочка tcsh, то это ни в коем случае не является вопросом bash, но я не решаюсь удалить тег перед мы знаем, что именно поможет вам выполнить то, что вам нужно. Ошибка: must source выглядит как ошибка самого скрипта, но совершенно неясно, почему это требование вообще необходимо.   -  person tripleee    schedule 02.03.2017


Ответы (1)


-e выполнит процесс. Однако source - это инструкция вашей оболочки. Что вам нужно сделать, так это вызвать вашу оболочку с помощью -e и передать аргументы оболочке, чтобы выполнить инструкцию source. Должно быть что-то вроде

os.system("gnome-terminal --tab --working-directory=/repo/ -e 'tcsh -c \"source myfile.csh\"'")
person languitar    schedule 02.03.2017
comment
Мой терминал закрывается сразу после выполнения скрипта. Есть ли какая-нибудь команда, чтобы задержать его? Мне нужно работать в нем. - person Legut; 02.03.2017
comment
добавьте ; sleep 1000 к команде, переданной в tcsh. - person languitar; 02.03.2017
comment
Ошибка: должен исходный скрипт, не может просто выполнить... - person Legut; 02.03.2017
comment
А если открыть терминал вручную и сделать source myfile.csh, то работает??? - person languitar; 02.03.2017
comment
Да, точно... - person Legut; 02.03.2017
comment
Итак, чтобы быть полностью откровенным, можете ли вы убедиться, что вы попробовали именно команду gnome-terminal --tab --working-directory=/repo/ -e 'tcsh -c \"source myfile.csh; sleep 1000\"', и она не сработала? - person tripleee; 02.03.2017
comment
Точно, и если я открою терминал вручную и наберу source myfile.csh, он отлично работает. - person Legut; 02.03.2017
comment
Похоже, скрипт python не устанавливает значение $_, что приводит к сбою myfile.csh - person Legut; 02.03.2017