Запустить терминальный скрипт в python? - PullRequest
0 голосов
/ 11 февраля 2020

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

subprocess.call(['source','../Apps/appName/run'])

Где 'run' - скрипт оболочки Я написал и сделал исполняемый файл. Но он продолжает выдавать ошибки, такие как

Нет такого файла или каталога или ** Нет такого файла или каталога: "source"

Я также попробовал следующее

subprocess.call(['source','../Apps/appName/run']) subprocess.call(['source ../Apps/appName/run']) subprocess.call(['.','../Apps/appName/run'])

Я пытаюсь запустить скрипт и оставить его в покое (как в случае, когда я не хочу никакого возвращаемого значения или посмотреть, что выводит скрипт оболочки есть.

Заранее спасибо

1 Ответ

0 голосов
/ 11 февраля 2020

source - встроенная оболочка, которая читает файл и интерпретирует команды в текущем экземпляре оболочки. Это похоже на C #include или Python import. Вы не должны использовать его для запуска сценариев оболочки.

Правильный способ запуска сценария - добавить шебанг, например, #!/bin/bash в первой строке и chmod +x yourscriptfile. Затем ОС будет считать его настоящим исполняемым файлом, который может быть надежно выполнен из любого контекста. В Python вы должны сделать:

subprocess.call(['../Apps/appName/run'])

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

subprocess.call(['bash', '../Apps/appName/run'])
...