2015-03-10 3 views
0

Я написал скрипт python. Когда я запускаю его напрямую (как показано ниже), он работает нормально.Не удается запустить скрипт python в фоновом режиме

python check_C1_criteria_file.py > test.out 

Но когда я запускаю его в фоновом режиме (например, ниже), он не показывает ни результата, ни ошибки.

python check_C1_criteria_file.py > test.out & 

или

nohup python check_C1_criteria_file.py & 

Что может пойти не так? Кто-нибудь может мне с этим помочь?

Update:

Основная часть сценария выглядит следующим образом:

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

Похоже, вы можете запустить программу python в фоновом режиме. Вы все еще хотите увидеть журнал? Попробуйте использовать 'nohup python check_C1_criteria_file.py> file.log &' – ProfOak

+2

Бросьте некоторые 'sys.stdout.flush()' 'после печати или используйте модуль регистрации. Он все еще не выводится? – U2EF1

+0

@ U2EF1 Это сработало для меня, спасибо! –

ответ

0

Вы можете попробовать

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

Вам лучше изучить, что эта программа завершается нормально.

0

Является ли ваш сценарий какой-либо обработкой терминала? Делает ли он какие-либо операции ввода-вывода, кроме простого sys.stdout.write(), или звонки на print (Python2.x) или print() (Python3.x)? Выполняет ли какие-либо операции input() или raw_input() или sys.stdin.read()? Это Python 2 или 3?

Грубо говоря, только разные вещи, которые отличаются при выполнении команды в фоновом режиме и на переднем плане, связаны с любыми вызовами, которые она вызывает на ваш терминал. Процесс в фоновом режиме, пытающийся получить доступ к вашему терминалу, может быть усыпан до тех пор, пока его не вернут на передний план. Обычная запись в stdout не будет блокировать ... но любые вызовы функций curses, даже некоторые из элементов termio в getpass() могут установить терминал в режим, который будет блокироваться при попытке записи терминала.

+0

См. Обновление выше в вопросе .. Спасибо .. –

Смежные вопросы