我想从终端读取CPU的数量。
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 grep的线程数未传递到线程数中。它的值为空。
答案 0 :(得分:2)
参考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 :(得分:1)
很抱歉以前误解了这个问题,但是使用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))
有关此的更多信息,SO post非常有用
答案 2 :(得分:1)
os.system()
函数返回shell的退出代码,而不是执行该工作的shell命令的输出。要捕获此输出,您需要打开管道并从中读取数据。在os
模块中执行此操作的方法是使用os.popen()
而不是os.system()
os.popen("""lscpu | grep 'CPU(s):' | head -1 | awk '{print $2}'""").read()
另一种方法是改用较新的subprocess
模块。自os.popen()
has been depreciated版本2.6起,您可能更喜欢subprocess
,特别是如果您希望代码在接下来的两个Python版本中都能生存。
subprocess.getoutput(""""lscpu | grep 'CPU(s):' | head -1 | awk '{print $2}'""")
旁注:我的三重引号在这里可能不是严格必需的,但是我想将它们放在这样的调用中,只是为了确保它们不干扰任何shell命令中的任何引号。
祝你好运!