Подпроцесс Python с использованием стандартного ввода - PullRequest
1 голос
/ 11 июня 2019

Я пытаюсь использовать подпроцесс python для вызова сторонней команды ParseAddress.Команда ParseAddress выводит строку текста с просьбой ввести список адресов, а затем на основе введенных данных выводит информацию трассировки стека.Если я запускаю команду вручную, она выглядит следующим образом:

$ParseAddress Appname                       <- Run the command in console
Paste the addresses - new line to continue
[0]0xaaaaaaaa                               <- a User paste a list of address here
[1]0xbbbbbbbb
[2]0xcccccccc
                                            <- the user type 'enter' to continue
Stack Trace info:                           <-- results of running the ParseAddress
0xaaaaaaaa: Test::info::Runtest
0xbbbbbbbb: Test::info::SingleTestCase
0xcccccccc: ...

Итак, я подумал, что подпроцесс () и communication () будет полезен в этом случае, если у меня уже есть список адресов в текстовом формате:

cmd = subprocess.Popen([ParseAddress, Appname], stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.STDOUT)
output, error = cmd.communicate(input="[0]0xaaaaaaaa\n[1]0xbbbbbbbb\n[2]0xcccccccc\n\n")
print(output)

Когда я использую подпроцесс с communite (), вывод консоли будет:

$ParseAddress Appname
Paste the addresses - new line to continue
0xaaaaaaaa: ?? ??:0                         <- subprocess.PIPE?
0xbbbbbbbb: ?? ??:0
0xcccccccc: ?? ??:0

Stack Trace info: <-- no results from the ParseAddress since the address info are in incorrect format

Если я использую

cmd.communicate(input="[0]0xaaaaaaaa\r\n[1]0xbbbbbbbb\r\n[2]0xcccccccc\r\n\r\n")

Результат:

$ParseAddress Appname
Paste the addresses - new line to continue
                                           <-- No address here, no ideas why
Stack Trace info:

У меня вопрос, почему параметры меняются с [0]0xaaaaaaaa на 0xaaaaaaaa: ?? ??:0?

Как правильно использовать связь ()?

среда:
Ubuntu 18.04
Python 2.7.16 :: Anaconda, Inc.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...