2015-05-14 1 views
0

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

Вот фрагмент моего сценария. Пожалуйста, извините за любые опечатки от меня, дезинфицирующие его.

ssh = subprocess.Popen("ssh " + HOST + " ps -ef | grep jetty | wc -l", stdin=subprocess.PIPE, shell=True) 

output = ssh.communicate() 
print output 

Вывод этого сценария:

1 
(None, None) 

документы говорят, что сообщаться возвращает кортеж (stdoutdata, stderrdata). Почему он возвращает 1, а затем (Нет, Нет)? Как подавить строку (сообщение None, None)?

+0

Не запускайте этот вид материала через оболочку с подпроцесса. Это не требуется, и это усложнит вашу жизнь. Или используйте надлежащий клиент ssh Python, например. paramiko или автоматизировать оболочку ssh с помощью pexpect. – wim

ответ

3

Чтобы получить ссылки на стандартный вывод команды и/или стандартную ошибку, вы должны передать subprocess.PIPE как значение аргументов ключевого слова stdout и (соответственно). В противном случае в кортеже возвращается значение None. Поскольку вы не указали значение для stdout, вывод команды переходит к стандартным выводам вашего скрипта Python, поэтому вы видите «1».

+0

ах, глупый меня. опечатка с моей стороны и thx для указания этого. я пробовал разные вещи и забыл изменить stdin на stdout. – Classified

0

1 - это результат вашего процесса (wc -l в этом случае). Поэтому ваш оператор печати генерирует (None, None) - если вы этого не хотите, просто не печатайте его.

1

это из справки о: subprocess.Popen.communicate

Обратите внимание, что если вы хотите отправить данные в стандартный ввод текущего процесса, вам нужно создать объект POPEN с = PIPE стандартного ввода. Точно так же, чтобы получить что-нибудь другое, чем None в результирующем наборе, вы должны дать STDOUT = PIPE и/или STDERR = PIPE слишком

+0

thank for edit @ doog-abides –

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