2013-11-17 5 views
4

Это резюме коды:Как вернуть значение питона скрипт Баш переменной

# import whatever 

def createFolder(): 
    #someCode 
    var1=Gdrive.createFolder(name) 
    return var1 

def main(): 
    #someCode 
    var2=createFolder() 
    return var2 

if __name__ == "__main__": 
    print main() 

Один из способов, в которых мне удалось вернуть значение переменного Баша печатал что вернулись из магистральных(). Другой способ - это только печать переменной в любом месте скрипта.
Есть ли способ вернуть его в более pythonic way?

Сценарий называется так:

folder=$(python create_folder.py "string_as_arg") 

ответ

2

Если вы работали в Баш, то вы можете просто сделать:

export var="value" 

Тем не менее, нет такого эквивалента в Python. Если вы попытаетесь использовать os.environ, эти значения сохраняются для остальной части процесса и ничего не изменят после завершения программы. Лучше всего делать то, что вы уже делаете.

+0

Возможно, как вы сказали, лучше всего напечатать main() или распечатать переменную в любом месте кода, однако я все еще впечатлен отсутствием «стандартного» или «предопределенного» способа верни это. – ederollora

0

Просто используйте sys.exit(), то есть:

import sys 

[...] 

if __name__ == "__main__": 
    sys.exit(main()) 
+1

Что делать, если он хочет вернуть строку – thefourtheye

+0

О да, правильно. Не очень идиоматично в unix, чтобы «вернуть» строку - просто распечатайте результат преобразования, который вы сделали со входом в stdout, и верните код выхода, чтобы сообщить вызывающему, если ваш сценарий преуспел или нет (необязательно предоставить некоторое сообщение об ошибке на stderr если он не прошел). – ldx

+0

Это решение не сработало для меня, как было сказано ранее, я возвращаю строку. – ederollora

0

Вы можете попытаться установить переменные окружения из кода питона и читать его на улице, в сценарий bash. Этот способ выглядит очень элегантно для меня, но это определенно не «идеальное решение» или единственное решение. Если вам нравится этот подход, эта нить может быть полезна: How to set environment variables in Python

Есть и другие способы, очень похожие на то, что вы сделали. Проверьте также эту тему: store return value of a Python script in a bash script

+0

Это не делает то, что вы думаете. Запустите это: https://gist.github.com/sigmavirus24/7514037, а затем на вашем терминале выполните «echo $ TEST_VARIABLE». Они не сохраняются за пределами текущего процесса (или дочерних процессов). –

+0

Вы очень правы, @ sigmavirus24. Tks для комментария. –

+0

рад помочь прояснить. Не нужно было ниспровергать вас –

2

Более pythonic Путь был бы избежать bash и написать всю партию в python.

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

bash и python работают в разных процессах, а межпроцессная связь (IPC) должна проходить через ядро. Существует много механизмов IPC, но bash не поддерживает их всех (например, разделяемая память). Самый низкий общий знаменатель здесь - bash, поэтому вы должны использовать то, что поддерживает bash, а не то, что имеет python (у python есть все).

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

Механизм, который вы используете из bash, состоит в том, чтобы захватить stdout дочернего процесса, поэтому python должен print. Под крышками используется анонимный трубопровод . Вместо этого вы можете использовать именованный канал (также известный как fifo), который python откроет как обычный файл и write. Но ты не купишь много.

+0

Возможно, я сам не объяснил, что может быть вызвано из-за моего отсутствия английского языка. То, что я пытался спросить, - это способ вернуть переменной bash значение, сгенерированное в скрипте python. Основная функция вернула значение, но я не знал, как, наконец, вернуть его из вызова main(). – ederollora

+0

Вот что я думал, что вы имели в виду. Ограничение заключается в смешении Bash с Python. Почему бы не написать часть Bash в скрипте Python? Bash не может делать ничего, что вы не можете сделать в Python. – cdarke

+0

Да, чтобы быть правдой, я больше знаком с bash, чтобы сделать некоторые базовые вещи unix, такие как файлы списков в каталоге grep, cut ... Я боюсь делать этот базовый материал в python и быть хуже. Каково ваше мнение? – ederollora

Смежные вопросы