2014-10-18 3 views
0

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

Я хочу, чтобы подпроцесс возвращал некоторые данные, а это не так. Поэтому я написал этот базовый пример, чтобы попытаться заставить его работать, но это все еще не так. Где я иду не так? Я не получаю никаких ошибок или ничего, это просто ничего не делает.

sp_test.py

import os 
import subprocess 

def main(): 
    subp = subprocess.check_call(['python', 'sp.py']) 
    print subp 


if __name__ == '__main__': 
    main() 

и ...

sp.py

def do_something(): 
    return "Hello World!" 


do_something() 

exit() 
+0

возвращается Проверка вызовов в только код возврата. Также вам нужно распечатать Hello World. Поскольку единственный способ - захватить печатный результат. Может быть, check_output? – Gohn67

+0

Если вы хотите увидеть выход, используйте 'print (do_something())' –

ответ

1

Есть две проблемы с вашей реализации.

1.

check_call возвращает только returncode 0 или генерирует исключение в противном случае. (См https://docs.python.org/2/library/subprocess.html#subprocess.call)

2.

Также вы пытаетесь захватить значение Hello World! просто возвращает значение. Это не будет работать с использованием подпроцесса. Если вы хотите сделать это, вы можете захотеть взглянуть на что-то вроде Pyro4 (https://pythonhosted.org/Pyro4/intro.html)


Вот одно решение, если вы хотите использовать подпроцесс еще.

Сначала вы можете использовать check_output (https://docs.python.org/2/library/subprocess.html#subprocess.check_output). Это приведет к захвату любого результата вашего подпроцесса.

Затем в вашей программе sp.py вам нужно будет распечатать результат do_something.

sp_test.py

import os 
import subprocess 

def main(): 
    subp = subprocess.check_output(['python', 'sp.py']) 
    print subp 

if __name__ == '__main__': 
    main() 

sp.py

def do_something(): 
    return "Hello World!" 


print do_something() 

exit() 
+0

Спасибо за информацию, я попробую и заработаю с ней! Моя текущая реализация ничего не выдает. Должен ли он, по крайней мере, распечатывать код возврата? – mino

+0

Да, должно. Я протестировал ваш скрипт в своей системе, и это сработало. Он напечатал 0 – Gohn67

+0

Интересный .. Он ничего не печатает для меня! – mino

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