我在python中编写了一个使用以下代码的程序:
for item in items:
sys.stdout.write("".join(str(i) for i in item))
sys.stdout.write(self.separator)
sys.stdout.flush()
打印输出。
当我通过终端正常运行时:
vm@ubuntu:~$ ./program.py
效果很好。
当我运行它并将stdout发送到文件时:
vm@ubuntu:~$ ./program.py > file
但是当我尝试在后台运行它时:
vm@ubuntu:~$ ./program.py > file &
它没有用输出填充文件。
有人知道如何解决它吗?
答案 0 :(得分:0)
尝试运行
./program.py > file &
而不是
./program.py > file $
答案 1 :(得分:0)
我通过删除等待KeyboardInterrupt package main
import (
"fmt"
"golang.org/x/net/html"
"strings"
)
func main() {
s := "html"
result := make(map[string]string)
d := html.NewTokenizer(strings.NewReader(s))
currID := ""
for {
tokenType := d.Next()
if tokenType == html.ErrorToken {
break
}
token := d.Token()
switch tokenType {
case html.StartTagToken:
if token.Data == "select" {
for _, a := range token.Attr {
if a.Key == "id" {
currID = a.Val
}
}
}
if token.Data == "option" {
isSelected := false
for _, a := range token.Attr {
if a.Key == "selected" {
isSelected = true
}
}
if isSelected {
for _, a := range token.Attr {
if a.Key == "value" {
result[currID] = a.Val
}
}
}
}
}
}
fmt.Printf("%v\n", result)
}
的行来解决它
并用无尽的循环代替它。
第一个问题是为了更好地理解:为什么这一行导致进程在后台运行时不能正确传递stdout? 在fg中运行时不会出现此问题。
现在,我需要通过终止进程来杀死它
raw_input()
第二个问题:如何在不使用阻塞和等待函数raw_input()的情况下通过缓冲区检查键击(就像在C中检查一样)?
答案 2 :(得分:0)
整个解决方案:
将以下代码添加到正在运行的程序中:
而(真): 尝试: 一个的raw_input =() 对于ai: 如果ai ==“q”: tb.stop() tb.wait()
使用以下命令运行程序
./ program.py< fileSTDIN&
为了终止正在运行的bg进程,我只需要在文件中写'q'
echo“q”> fileSTDIN