使用python

时间:2019-06-24 15:55:36

标签: python python-3.x multithreading gnome-terminal

我想从终端读取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的线程数未传递到线程数中。它的值为空。

3 个答案:

答案 0 :(得分:2)

参考https://docs.python.org/3/library/os.html#os.system

  

...返回值是进程的退出状态...

文档继续:

  

子流程模块提供了更强大的功能来生成新流程并检索其结果;使用该模块优于使用此功能。

基本上,os.system不允许您捕获正在运行的子进程的输出。您应该看看subprocess.runhttps://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命令中的任何引号。

祝你好运!