2014-11-18 4 views
0

Я хочу выполнить файл сценария оболочки из Python. Я в настоящее время использую посланника, чтобы сделать это:Выполнение файла bash из Python

envoy.run('./scripts.sh') 

Но он бросает мне ошибку No such file or directory.

Мне интересно, по какому пути выполняется указанный выше файл? Как я могу запустить этот скрипт? Он находится в том же каталоге, что и скрипт Python.

+0

Проблема также может быть притон -line в вашем скрипте.sh. Возможно, это указывает на неверный интерпретатор, таким образом вы получаете то же сообщение об ошибке. Просто мысль ... – tamasgal

+0

'#!/Bin/bash' - это строка shebang – linkyndy

+1

ОК, если'/bin/bash' существует, тогда вы должны посмотреть 'envoy', я не знаю об этом пакете. Попробуйте 'envoy.run ('pwd')', чтобы проверить, где вы находитесь. – tamasgal

ответ

4

Программа выполняется в текущем рабочем каталоге, как указано в os.getcwd(). Для командной строки, обычно это каталог, в котором вы находитесь, когда вы запускаете программу. Чтобы выполнить команду в том же каталоге, что питон скрипт, используйте переменную __file__, чтобы выяснить, где вы находитесь:

import os 
import envoy 

my_path = os.path.dirname(os.path.abspath(__file__)) 
envoy.run('./scripts.sh', cwd=my_path) 
+0

Действительно, указание 'cwd' на' envoy' ** и ** 'chmod'-ing' scripts.sh' решило мою проблему. Спасибо! – linkyndy

1

Ошибка вы получаете не обязательно может быть от самого питона, но ваш Баш скрипт как ошибка вы опубликовали также могут быть возвращены из самого bash.

-bash: ./asdf: No such file or directory 

Есть ли в вашем сценарии оболочки аргументы? Кроме того, вы пытались выполнить свой сценарий оболочки напрямую, а не через python?

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

#!/usr/bin/env bash 
Смежные вопросы