#python #subprocess
#python #подпроцесс
Вопрос:
У меня есть инструмент командной строки, который я запускаю следующим образом:
/home/user/Dennis -- - -- ----- -- - - -- -- - - --- -- -- - - -- --- - - - - -- ----- --- -- --- - ---- ---- - --- - ---------- ----- ------ -- - - --- -- - ----- - ----- - - -- - -- --- - - -- - ---- --- -- - ---- -- - - -- - - - - ------ - - - -- -- --- - --- - --- --- -- -- -- - - -- -- ------- - -- --- -- - -- - - ---- - --- ------- - ----- - -------- -- - - - ----- - - - --- - --- --- - --- - --- - -- --- - - - - --------- - - --- ----- - -- -- - - -- ---- - - - --- -- -------- -- ---
-5258461839360
Другими словами, в качестве аргумента командной строки используется длинная строка из и -s, разделенных пробелами. Я пытаюсь вызвать его из Python. В ipython я делаю:
In [1]: outstr = "-- - -- ----- -- - - -- -- - - --- -- -- - - -- --- - - - - -- ----- --- -- --- - ---- ---- - --- - ---------- ----- ------ -- - - --- -- - ----- - ----- - - -- - -- --- - - -- - ---- --- -- - ---- -- - - -- - - - - ------ - - - -- -- --- - --- - --- --- -- -- -- - - -- -- ------- - -- --- -- - -- - - ---- - --- ------- - ----- - -------- -- - - - ----- - - - --- - --- --- - --- - --- - -- --- - - - - --------- - - --- ----- - -- -- - - -- ---- - - - --- -- -------- -- ---"
In [2]: from subprocess import check_output
In [3]: check_output(["/home/user/Dennis", outstr])
Out[3]: '-1n'
Я предполагаю, что это пробелы, которые вызывают проблему.
Как я могу получить тот же вывод, что и из командной строки?
Ответ №1:
Разделите outstr
и передайте разделенную строку из списка в check_call()
. Самый простой способ внести изменения в ваш текущий код — сделать его как:
from subprocess import check_call
outstr = "-- - -- ----- -- - - -- -- - - --- -- -- - - -- --- - - - - -- ----- --- -- --- - ---- ---- - --- - ---------- ----- ------ -- - - --- -- - ----- - ----- - - -- - -- --- - - -- - ---- --- -- - ---- -- - - -- - - - - ------ - - - -- -- --- - --- - --- --- -- -- -- - - -- -- ------- - -- --- -- - -- - - ---- - --- ------- - ----- - -------- -- - - - ----- - - - --- - --- --- - --- - --- - -- --- - - - - --------- - - --- ----- - -- -- - - -- ---- - - - --- -- -------- -- ---"
check_call_args = ["/home/user/Dennis"] outstr.split(' ')
check_call(check_call_args)
where str.split(' ')
разделит вашу строку на список подстрок, разделенных пробелом ' '
.