我正在努力将一个程序(samtools)合并到一个管道中。 FYI samtools是一个用于操纵SAM格式的DNA序列比对的程序。它需要输入并通过stdin和stdout生成输出文件,因此很容易通过pythons subprocess.Popen()来控制它。
当它运行时,它还向控制台输出短消息 - 显然不是使用stdout - 我想知道是否有可能捕获这些 - 可能是通过获取操作系统生成的处理程序列表?
我想我的问题一般是,如果它不是来自stdout,是否可以捕获程序控制台输出?谢谢。
答案 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 | ...
属性也可以捕获它。产生过程对象。