Я хотел бы вызвать внешний скрипт из функции, например:
import subprocess def call_script(script): subprocess.call(script) return answer #retrieving the result is the part I'm struggling with call_script("/user/bin/calc_delta.py")
Скрипт calc_delta.py просто печатает результат, когда он сделан.Как я могу присвоить результат этого скрипта переменной?Спасибо.
Вместо использования subprocess.call вы должны использовать Popen и вызвать communicate для него.
subprocess.call
Popen
communicate
Это позволит вам читать stdout и stderr. Вы также можете вводить данные с помощью stdin.
stdout
stderr
stdin
Пример из документов http://docs.python.org/library/subprocess.html#replacing-bin-sh-shell-backquote:
output = Popen(["mycmd", "myarg"], stdout=PIPE).communicate()[0]
В Python ≥2.7 / ≥3.1 вы можете использовать subprocess.check_output для преобразования stdout в str.
subprocess.check_output
answer = subprocess.check_output(['/usr/bin/calc_delta.py'])
Есть также subprocess.getstatusoutput и subprocess.getoutput в Python ≥3.1, если вам нужна команда оболочки, но она поддерживается только * NIX.
subprocess.getstatusoutput
subprocess.getoutput
Вы должны посмотреть на подпроцесс. Open ( popen )
Например (из документов):
pipe = Popen("cmd", shell=True, bufsize=bufsize, stdout=PIPE).stdout
subprocess.call только даствам код ответа на ваш звонок, а не вывод.