2015-01-12 2 views
5

У меня проблема с Popen.communicate().Popen.communicate() возвращает (None, None), даже если результат печати сценария

У меня есть сценарий, который возвращает строку.

Затем я написал второй скрипт, который принимает эту переменную.

v = "./myscript arg1 arg2" 
com = subprocess.Popen(v, shell=True).communicate() 
print com 

com возвращает (None, None). Дело в том, что я могу напечатать внутри первого скрипта результаты, результат печати оболочки. Я не могу просто назначить эту печать переменной.

Конечно, первый скрипт возвращает значение, а не печатает его.

+2

Если вы собираетесь использовать стандартный вывод для передачи результатов от 'myscript' обратно к вашему сценарию Python, вам не понадобится' myscript', чтобы на самом деле печатать что-то в STDOUT? – rchang

+0

Это было решение. –

ответ

5

Из docs:

Обратите внимание, что если вы хотите отправить данные в стандартный ввод текущего процесса, вам нужно создать Popen объект с stdin=PIPE. Точно так же, чтобы получить ничего, кроме None в кортеже результата, вам нужно дать stdout=PIPE и/или stderr=PIPE.

Таким образом, создать Popen объект:

subprocess.Popen('lsr', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
+0

Спасибо! Это один шаг вперед, но теперь я получаю пустую строку -.- –

+0

В ленивом ответе не указывается, где добавить 'stdout = PIPE' или' stderr = PIPE'. – N8TRO

0

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

Главный сценарий не принт результат, но возврат. Я думал, что это будет наоборот.

Спасибо!

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