Чтение строки из терминала с использованием Python - PullRequest
2 голосов
/ 24 июня 2019

Я хочу прочитать номер процессора с терминала.

Number_of_process_to_run = int(input("Number of Process you want to run : "))
number_of_threads = (os.system("lscpu | grep 'CPU(s):' | head -1 | awk '{print $2}'"))

nt = int (input("Your Number of Threads is :" +str(number_of_threads)))

Количество потоков, извлеченных из os.system, не входит в число потоков.Он принимает нулевое значение.

Ответы [ 3 ]

2 голосов
/ 24 июня 2019

Ссылка https://docs.python.org/3/library/os.html#os.system

... возвращаемым значением является состояние выхода процесса ...

Документы продолжаются:

Модуль подпроцесса предоставляет более мощные средства для порождения новых процессов и получения их результатов; использование этого модуля предпочтительнее, чем использование этой функции.

В основном os.system не позволяет вам захватывать выходные данные выполняемого вами подпроцесса. Вы должны взглянуть на subprocess.run (https://docs.python.org/3/library/subprocess.html#subprocess.run)

1 голос
/ 24 июня 2019

Функция os.system() возвращает код завершения оболочки, а не выходные данные команды оболочки, которая выполнила работу.Чтобы захватить этот вывод, вам нужно открыть канал и прочитать из него.Способ сделать это в модуле os - использовать os.popen() вместо os.system()

os.popen("""lscpu | grep 'CPU(s):' | head -1 | awk '{print $2}'""").read()

Другой способ - использовать более новый модуль subprocess.Поскольку os.popen() устарела начиная с версии 2.6, вы можете предпочесть subprocess, особенно если вы ожидаете, что ваш код выдержит следующую пару ревизий Python.

 subprocess.getoutput(""""lscpu | grep 'CPU(s):' | head -1 | awk '{print $2}'""")

Примечание: Мои тройные кавычки здесь могут быть не нужны, но мне нравится помещать их в такие вызовы, просто для того, чтобы они не мешали заключать в кавычки какие-либо команды оболочки.

Удачи!

1 голос
/ 24 июня 2019

Извините за неправильное толкование вопроса раньше, но использование os.popen должно отразить количество процессов, и, как упоминалось в моем комментарии, nproc также помогает уменьшить код:

Number_of_process_to_run = int(input("Number of Process you want to run : "))
number_of_threads = int((os.popen("nproc").read()))

print('Your Number of Threads is: ' + str(number_of_threads))

Для получения дополнительной информации оэто ТАК сообщение очень полезно

...