Так как мне не разрешают отредактировать ответ Jauco, я дам полный ответ, который работал на меня (страница Russell полагается на негарантируемое поведение, что при закрытии fd 1 для stdout следующие создают вызов, откроет fd 1.
Так, выполняет простой бесконечный сценарий как это:
import time
while True:
print 'test'
time.sleep(1)
Сохраняют его к test.py, работают с
python test.py
, Получают изодромное с предварением:
ps auxw | grep test.py
Теперь, присоедините gdb:
gdb -p (pid)
и делают fd волшебство:
(gdb) call creat("/tmp/stdout", 0600)
$1 = 3
(gdb) call dup2(3, 1)
$2 = 1
Теперь можно выследить/tmp/stdout и видеть вывод, который раньше переходил к stdout.
Я считаю этот документ Дж. П. Кальдероне отличным советом о том, как (не) структурировать ваш проект Python. После этого у вас не будет проблем. Я воспроизведу здесь весь текст:
Структура файловой системы проекта Python
Сделайте :
- назовите каталог как-нибудь связанные с вашим проектом. Например, если ваш проект называется " Twisted ", назовите каталог верхнего уровня для его исходные файлы
Twisted
. Когда ты делаешь релизы, вы должны включить версию суффикс номера:Twisted-2.5
.- создать каталог
Twisted / bin
и поместите туда свои исполняемые файлы, если вы have any. Don't give them a.py
extension, even if they are Python source files. Don't put any code in them except an import of and call to a main function defined somewhere else in your projects.- If your project is expressable as a single Python source file, then put it into the directory and name it something related to your project. For example,
Twisted/twisted.py
. If you need multiple source files, create a package instead (Twisted/twisted/
, with an emptyTwisted/twisted/__init__.py
) and place your source files in it. For example,Twisted/twisted/internet.py
.- put your unit tests in a sub-package of your package (note - this means that the single Python source file option above was a trick - you always need at least one other file for your unit tests). For example,
Twisted/twisted/test/
. Of course, make it a package withTwisted/twisted/test/__init__.py
. Place tests in files likeTwisted/twisted/test/test_internet.py
.- add
Twisted/README
and Twisted/setup.py
to explain and install your software, respectively, if you're feeling nice.Don't:
- put your source in a directory called
src
orlib
. This makes it hard to run without installing.- put your tests outside of your Python package. This makes it hard to run the tests against an installed version.
- create a package that only has a
__init__.py
and then put all your code into__init__.py
. Just make a модуль вместо пакета, это проще.- попробуйте придумать волшебные хаки, чтобы Python мог импортируйте свой модуль или пакет без когда пользователь добавляет каталог содержащий его в свой путь импорта (через
PYTHONPATH
или другой механизм). Ты не правильно будешь обрабатывать все дела, и пользователи получат злится на тебя, когда твое программное обеспечение не работает в их среде.