我编写了一个脚本,当我正常运行它时,它可以顺利运行, ./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/