使用Python读取Linux终端输出';子处理模块

使用Python读取Linux终端输出';子处理模块,python,bash,sh,Python,Bash,Sh,我正在Linux终端上运行python,测试运行时需要运行一些bash命令。因此,我正在使用子流程模块并运行测试命令(bash脚本)。这些所谓的bash命令可能会在CLI上打印一些东西,我需要知道在并行运行python代码时它是否会打印这些东西 例如: # running my python TCP server subprocess.call(['.\run_some_shell_commands.sh'],shell=True) while True: # I am doing

我正在Linux终端上运行python,测试运行时需要运行一些bash命令。因此,我正在使用子流程模块并运行测试命令(bash脚本)。这些所谓的bash命令可能会在CLI上打印一些东西,我需要知道在并行运行python代码时它是否会打印这些东西

例如:

# running my python TCP server 

subprocess.call(['.\run_some_shell_commands.sh'],shell=True)

while True:
   # I am doing some other python stuff 

   if (CLI_HAS_SOME_OUTPUT_DETECTED):
       #record the output to some variable 


   # doing some more python stuff 


如果我确信run_some_shell_commands.sh肯定会返回一些输出,我可以简单地使用A=subprocess.checkoutput(['.\run_some_shell_commands.sh'],shell=True)将其输出保存在变量A

是否有办法抓取终端的最后n行???以便我可以检查该事件是否发生,并将其分配给CLI\u是否检测到某些输出\u

非常感谢您的任何建议


赛拉

这在中得到了回答。有两类shell命令,可执行文件和内置命令,在某些编程语言中这可能会有所不同,请参见

您需要捕获stdout或stderr,您可以使用
capture\u output=True
@AlexanderHuszagh为我的延迟回复道歉。。正在用capture_输出尝试不同的东西。。我想澄清一下。。我期望的输出不是来自我正在运行的shell脚本。。据我从focs了解,capture_output保存我们试图执行的任何shell命令的输出。在这种情况下,我不确定该事件何时可能发生,我可能需要连续监视终端输出一段阈值时间,如果发生这种情况,我可能需要保存它正在打印的文本。。考虑过使用script命令,但linux box是合适的,不允许我安装任何包。您可以运行正在运行的脚本并将输出传输到其他地方,在那里您可以继续处理它。仔细考虑您需要做什么,我删除了我的原始答案,因为它可能已经回答了您的确切用例。我尝试了类似的方法,它为我完成了任务(到目前为止,不确定此方法有多好),谢谢ralf。。我认为重点是使用capture_输出(在py3+中)
import subprocess
import time as t
cmd = [' ']
P = subprocess.check_output(cmd,shell=True)
while True :
        print(P)
        t.sleep(0.1)