#python-3.x #linux #popen
#python-3.x #linux #popen
Вопрос:
Я пишу программу, предназначенную для Unix / Linux, которая просматривает все программы в каталоге исполняемых файлов (например, «/ usr / bin») и собирает статистику по найденным там скриптам.
Для этого я использую os.popen () для выдачи двух команд, которые имеют решающее значение для программы.
Вот пример кода, который должен проиллюстрировать, что я имею в виду:
os.chdir("/usr/bin")
programs = os.listdir()
for program in programs:
command = 'file ' program
p = os.popen(command)
line = p.readline()
line = line.rstrip()
progtype = line
p.close()
command = 'whatis ' program
p = os.popen(command)
line = p.readline()
line = line.rstrip()
what = line
p.close()
Теперь вы можете видеть, что команда os.popen () используется для двух команд оболочки: ‘file’ и ‘whatis’. Во-первых, использование команды ‘file’ работает так, как должно. Я могу использовать вывод команды, прочитав одну строку из дескриптора файла «p», как в
p=os.popen('file ssh')
Я могу сохранить вывод в виде строковой переменной для последующего использования.
Вторая команда с «whatis» имя программы ведет себя иначе. после выдачи инструкции:
p=os.popen('whatis ssh')
Результат команды сразу появляется на экране и, похоже, недоступен для использования в строковой переменной или любой переменной.
У кого-нибудь еще был такой опыт?
Комментарии:
1. Я не могу воспроизвести поведение, которое вы описываете. В интерактивном сеансе python и с использованием строковых литералов, а не цикла, который я получаю
>>> line 'ssh (1) - OpenSSH SSH client (remote login program)'
2. Это работает для меня. Вы уверены, что это обычный вывод, а не сообщение об ошибке (поскольку они идут
stderr
вместоstdout
)?3. Правильно, то, что предлагал @Selcuk … a
command = 'whatis yplan'
выводится на экран,>>> yplan: nothing appropriate.
потому что для него нет справочных страниц.