无法在后台运行python脚本

时间:2015-03-10 04:15:47

标签: python linux

我写了一个python脚本。当我直接运行它(如下)时,它工作正常。

python check_C1_criteria_file.py > test.out

但是当我在后台运行它时(如下所示),它既不显示任何结果也不显示错误。

python check_C1_criteria_file.py > test.out &

nohup python check_C1_criteria_file.py &

可能出现什么问题?任何人都可以帮我这个吗?

更新

脚本的主要部分如下:

 blastOutput_file=sys.argv[1];
 lengthFile = sys.argv[2];
 with open(blastOutput_file, 'rb') as csvfile:
    reader = csv.reader(csvfile, delimiter='\t')
    sys.stdout.write('#query_id'+'\t'+'Mapping_Id'+'\t'+'Description'+'\n');
    for row in reader:
        tid=row[0];
        subid=row[1];
        mapid=getMapping_id(subid);
        idDes = search_id(lengthFile, mapid);
        if idDes is not None:
            sys.stdout.write(tid+'\t'+str(mapid)+'\t'+str(idDes)+'\n');

我错过了什么吗?

2 个答案:

答案 0 :(得分:1)

您的脚本是否在进行任何类型的终端处理?它是否可以执行除简单sys.stdout.write()之外的任何I / O或调用print(Python2.x)或print()(Python3.x)?是执行任何input()raw_input()还是sys.stdin.read()操作?是Python 2还是3?

粗略地说,在后台运行命令与在前台运行命令时,唯一不同的是与终端进行的任何调用相关的事情。尝试访问终端的后台进程可能会暂停,直到它返回到前台。对stdout的正常写入不会阻塞...但是对curses函数的任何调用,甚至getpass()中的一些termio东西都可能将终端设置为阻止尝试终端写入的模式。

答案 1 :(得分:0)

你可以尝试

nohup python check_C1_criteria_file.py >test.out 2>&1 &

你最好检查一下这个程序是否正常终止。