Есть ли какая-то причина, по которой ошибки os.popen () в запросе ‘whatis

#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. потому что для него нет справочных страниц.