linux - Linux终端上后台的正确使用

标签 linux background

我编写了一个脚本,当我正常运行它时,它可以顺利运行, ./myscript -p ~ -n 1

该脚本打开/创建一个文件并将数据写入该文件。

但是当我尝试在后台运行它时 ./myscript -p ~ -n 1 & 文件已创建,但未写入数据。

我做错了什么?

代码:

#!/usr/bin/env python2
# -*- coding: utf-8 -*-
##################################################
# GNU Radio Python Flow Graph
# Title: Myscript
# Generated: Fri Mar  3 02:32:56 2017
##################################################

from gnuradio import blocks
from gnuradio import eng_notation
from gnuradio import gr
from gnuradio.eng_option import eng_option
from gnuradio.filter import firdes
from optparse import OptionParser
import osmosdr
import time


class myscript(gr.top_block):

    def __init__(self, path="myoutput", freq=480e6):
        gr.top_block.__init__(self, "Myscript")

        ##################################################
        # Parameters
        ##################################################
        self.path = path
        self.freq = freq

        ##################################################
        # Variables
        ##################################################
        self.samp_rate = samp_rate = 1e6

        ##################################################
        # Blocks
        ##################################################
        self.osmosdr_source_0 = osmosdr.source( args="numchan=" + str(1) + " " + "bladerf=0" )
        self.osmosdr_source_0.set_sample_rate(samp_rate)
        self.osmosdr_source_0.set_center_freq(freq*1e6, 0)
        self.osmosdr_source_0.set_freq_corr(0, 0)
        self.osmosdr_source_0.set_dc_offset_mode(0, 0)
        self.osmosdr_source_0.set_iq_balance_mode(0, 0)
        self.osmosdr_source_0.set_gain_mode(False, 0)
        self.osmosdr_source_0.set_gain(10, 0)
        self.osmosdr_source_0.set_if_gain(20, 0)
        self.osmosdr_source_0.set_bb_gain(20, 0)
        self.osmosdr_source_0.set_antenna("", 0)
        self.osmosdr_source_0.set_bandwidth(0, 0)

        self.blocks_file_sink_0 = blocks.file_sink(gr.sizeof_gr_complex*1, path, False)
        self.blocks_file_sink_0.set_unbuffered(False)

        ##################################################
        # Connections
        ##################################################
        self.connect((self.osmosdr_source_0, 0), (self.blocks_file_sink_0, 0))    

    def get_path(self):
        return self.path

    def set_path(self, path):
        self.path = path
        self.blocks_file_sink_0.open(self.path)

    def get_freq(self):
        return self.freq

    def set_freq(self, freq):
        self.freq = freq
        self.osmosdr_source_0.set_center_freq(self.freq*1e6, 0)

    def get_samp_rate(self):
        return self.samp_rate

    def set_samp_rate(self, samp_rate):
        self.samp_rate = samp_rate
        self.osmosdr_source_0.set_sample_rate(self.samp_rate)


def argument_parser():
    parser = OptionParser(option_class=eng_option, usage="%prog: [options]")
    parser.add_option(
        "-p", "--path", dest="path", type="string", default="myoutput",
        help="Set myoutput [default=%default]")
    parser.add_option(
        "-f", "--freq", dest="freq", type="eng_float", default=eng_notation.num_to_str(480e6),
        help="Set freq [default=%default]")
    return parser


def main(top_block_cls=myscript, options=None):
    if options is None:
        options, _ = argument_parser().parse_args()

    tb = top_block_cls(path=options.path, freq=options.freq)
    tb.start()
    try:
        raw_input('Press Enter to quit: ')
    except EOFError:
        pass
    tb.stop()
    tb.wait()


if __name__ == '__main__':
    main()

最佳答案

我通过删除 raw_input() 并将 try except 更改为带有无限循环的 KeyboardInterrupt 异常来解决它。

关于linux - Linux终端上后台的正确使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42575957/

相关文章:

android - 带有异步任务android的DoInBackground错误

javascript - JavaScript :window. print() 的补充属性/设置以默认启用背景

linux - ping 回复 header

ruby-on-rails - 在 ubuntu 中取消 bash 的源码

html - 如何更改 Bootstrap 行第二个跨度的背景颜色

java - 将图像放置在 jmenubar + jtoolbar 中

php - 如何杀死后台php线程?

windows - Linux 中是否存在内存泄漏?

linux - awk打印所需数量的字段

linux - 让Unix文件系统中的文件路径实际指向一个程序