抑制标准输出Python SIGSTOP

抑制标准输出Python SIGSTOP,python,signals,stdout,Python,Signals,Stdout,我正在尝试创建一个在后台运行的程序,但可以轻松地在未暂停的情况下暂停。这可以通过启动另一个prog.py副本并使用暂停标志来完成。我可以通过这种方式成功地暂停和取消暂停我的程序。使用sig处理程序,我可以输出到stdout “暂停程序” “恢复程序” 我启动程序,使用如下命令进行工作: ./prog.py -H foo -P bar -i 10 当我以 ./prog.py --pause 1 这会导致升起一个调用 os.kill(%pid, signal.SIGSTOP) 所有内容都会按应

我正在尝试创建一个在后台运行的程序,但可以轻松地在未暂停的情况下暂停。这可以通过启动另一个prog.py副本并使用暂停标志来完成。我可以通过这种方式成功地暂停和取消暂停我的程序。使用sig处理程序,我可以输出到stdout “暂停程序” “恢复程序”

我启动程序,使用如下命令进行工作:

./prog.py -H foo -P bar -i 10
当我以

./prog.py --pause 1
这会导致升起一个调用

os.kill(%pid, signal.SIGSTOP)
所有内容都会按应有的方式暂停,但第一次(也是第一次)暂停时,我会将这种类型的输出发送到stdout:

 [2]+  Stopped                 ./prog.py -H foo -P bar -i 10

我试图通过设置sys.stdout='/dev/null'来抑制它,但似乎没有这样做。如果我搞不懂,这还不是世界末日,我只是有点恼火,真的只想在父程序中看到暂停和恢复。有什么想法吗?

这不是python的风格

挂起作业时,shell(
bash
可能)会打印该行

因此,您无法从python中抑制


坏消息是,您也无法禁止从bash打印该信息。参见

的答案,如其他答案中所述,这是由shell打印的。shell监视它派生的每个子进程的状态。其中一个子进程是python程序。当它停止时,shell会收到通知(使用
SIGCHLD
),获取停止的子作业的终止状态,并打印该消息,让您知道其中一个正在运行的作业现在已挂起

我不知道是否可以将bash配置为停止打印作业状态更改,但您还可以执行以下操作:在
prog.py
内部,只需
fork()
并在父级中退出,使子级保持活动状态。这会导致
prog.py
成为
init
的子级(而不是
bash
的子级),因此
bash
将不再关心它

我不懂Python,但这里有一个C语言的示例:

#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>

int main(void) {
    pid_t f;
    if ((f = fork()) < 0) {
        perror("Unable to fork");
        exit(EXIT_FAILURE);
    }
    if (f == 0) {
        /* Child takes over */
        while (1); /* Just place your code here */
    }
    return 0;
}
#包括
#包括
#包括
#包括
内部主(空){
pid_t f;
如果((f=fork())<0){
佩罗尔(“无法叉叉”);
退出(退出失败);
}
如果(f==0){
/*孩子接管*/
while(1);/*只需将代码放在这里*/
}
返回0;
}
我相信您可以在Python中执行类似的操作