是否有可能在Popen调用中捕获除stdin,stdout和stderr之外的数据流?

时间:2016-09-12 11:03:38

标签: python stream subprocess stdout stderr

我正在努力将一个程序(samtools)合并到一个管道中。 FYI samtools是一个用于操纵SAM格式的DNA序列比对的程序。它需要输入并通过stdin和stdout生成输出文件,因此很容易通过pythons subprocess.Popen()来控制它。

当它运行时,它还向控制台输出短消息 - 显然不是使用stdout - 我想知道是否有可能捕获这些 - 可能是通过获取操作系统生成的处理程序列表?

我想我的问题一般是,如果它不是来自stdout,是否可以捕获程序控制台输出?谢谢。

1 个答案:

答案 0 :(得分:2)

除了stdout和stderr之外没有其他控制台输出(假设samtools不通过tty设备直接写入终端)。因此,如果没有使用子进程stdout捕获输出,则必须将其写入stderr,使用Popen() stderr=subprocess.PIPE并使用stderr并检查case_Stmt : 'CASE' expression 'OF' case_Selection + ( 'ELSE' stmt_List )? 'END_CASE'; case_Selection : case_List ':' stmt_List; case_List : case_List_Elem ( ',' case_List_Elem )*; case_List_Elem : subrange | constant_Expr; constant_Expr : constant | enum_Value; stmt_List : ( Stmt ? ';' )*; stmt : assign_Stmt | subprog_Ctrl_Stmt | selection_Stmt | Iteration_Stmt; assign_Stmt : ( variable ':=' expression ) enum_Value : ( identifier '#' )? identifier; variable : identifier | ... 属性也可以捕获它。产生过程对象。