Я сталкиваюсь со следующей проблемой:Запуск Баш скрипт из питона
У меня есть этот простой скрипт, названный test.sh:
#!/bin/bash
function hello() {
echo "hello world"
}
hello
, когда я запускаю его из оболочки, я получил ожидаемый результат :
$ ./test2.sh
hello world
Однако, когда я пытаюсь запустить его из Python (2.7.?) Я получаю следующее:
>>> import commands
>>> cmd="./test2.sh"
>>> commands.getoutput(cmd)
'./test2.sh: 3: ./test2.sh: Syntax error: "(" unexpected'
Я верю, что он каким-то образом запускает скрипт из «sh», а не bash. Я так думаю, потому что, когда я запускаю его с ш я получаю то же сообщение об ошибке:
$ sh ./test2.sh
./test2.sh: 3: ./test2.sh: Syntax error: "(" unexpected
Кроме того, когда я запускаю команду с предшествующими «Баш» из питона, он работает:
>>> cmd="bash ./test2.sh"
>>> commands.getoutput(cmd)
'hello world'
Мой вопрос: почему python предпочитает запускать скрипт с sh вместо bash, хотя я добавил строку #!/bin/bash
в начале скрипта? Как я могу сделать это правильно (я не хочу использовать предыдущий «bash» в python, так как мой скрипт запускается из python удаленными машинами, которые я не могу контролировать).
Спасибо!
Ухм, ваш шэбанг выглядит не так. '# ~/bin/bash', это даже не shebang, а простой комментарий. Это должно быть '#!/Bin/bash'. –
Извините. Была только опечатка –
Она работает без изменений на моем Ubuntu 12.10 32-бит. Может быть что-то с вашей средой по умолчанию, которая вызывает использование sh вместо bash. – TAS