Почему мой подпроцесс STDOUT ничего не печатает под nohup
У меня код выполнен следующим образом
$ python mycode.py param1 param2
Это производит вывод, используя подпроцесс внутри mycode.py
:
import subprocess
paramlist = ['othercodes.py','infilel.txt']
p = subprocess.Popen(paramlist,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
out, err = p.communicate()
# out is empty under nohup
print out
У меня нет проблем с получением полного результата с помощью этих команд:
$ python mycode.py > output.txt
$ python mycode.py >> output.txt
Но когда я делаю одно из этого, я получаю пустой результат в output.txt
:
$ nohup python mycode.py > output.txt &
$ nohup python mycode.py >> output.txt &
$ nohup python mycode.py >> output.txt 2>&1
Как правильно это сделать?
Обновление:
Я исправил проблему. Как указал Чарльз Даффи, проблема в othercodes.py
, В частности эти строки:
# # If there's input ready, do something, else do something
# # else. Note timeout is zero so select won't block at all.
# if sys.stdin in select.select([sys.stdin], [], [], 0)[0]:
# infile = sys.stdin.readline().strip()
# args.append(infile)
Как только я закомментировал последние 3 строки, mycode.py
тогда работает нормально.