我正在尝试实时查看子进程的实时输出。我在这里尝试了几种方法,但它们对我不起作用。现在我有方法可行,但它导致我的程序在成功完成子进程后立即退出。我得到的返回码为零。该命令在FreeBSD jail(如chroot)中运行,实际上有效,它只是在完成程序的其余部分之前退出。
$(document).ready(function(){
$("a.open-newsletter").on( "click", function() {
$("#newsletter").toggleClass('opened');
userScroll = $(document).scrollTop();
return false;
});
$(window , 'body').on('scroll', function() {
if ( $("#newsletter").hasClass('opened') ) {
var newScroll = $(document).scrollTop();
if (userScroll - newScroll > 100 || newScroll - userScroll > 100) {
$("#newsletter").removeClass('opened');
}
}
});
});
答案 0 :(得分:0)
我认为你打算在执行其他进程时使stdout静音,以防止python输出破坏子进程的输出。但是,这可能是不必要的,因为你的python代码只是等待,所以它无论如何都不能打印任何东西。
如果你想让python打印静音,然后恢复它们,那就更像是这样:
import os, sys
with open(os.devnull, 'w') as DEVNULL:
save = sys.stdout # this is what you want to restore later
sys.stdout = DEVNULL
print "this prints to devnull (not really)"
sys.stdout = save # restore the original sys.stdout
print "this prints to stdout"
请注意,save只是真正的sys.stdout的临时变量,您希望稍后再回来。
答案 1 :(得分:0)
正如@Kenny指出的那样,我已经重定向了sys.stdout,并且我的程序实际上仍然在sys.stdout = save之后执行。之后我添加了这一行来恢复输出到屏幕,sys.stdout = sys。 stdout 。所以这一切都是:
import os, sys, subprocess
# Next 2 lines not needed
# DEVNULL = open(os.devnull, 'w')
# save = DEVNULL
tick = re.escape("'")
Jcmd = "jexec 1 sh -c '/usr/local/bin/aria2c --quiet=false -x 10 " + re.escape(links[1]) + tick
proc = subprocess.Popen(Jcmd, shell=True)
returncode = proc.wait()
print "RETURN CODE: ", returncode
# Next 2 lines not needed
#sys.stdout = save
#sys.stdout = sys.__stdout__
print "THIS PRINT STATEMENT DOES NOT EXECUTE, PYTHON EXITS BEFORE"