LINUX.ORG.RU

python, перенаправить вывод внешней команды в файл


0

0

Привет,

открыл файл на запись

sys.stdout = open( logfile, "w" )

все, что через print, уходит в этот файл.

Но мне надо еще запускать внешние команды, скрипты и хотелось бы, что бы их вывод тоже втуда уходил.

Пробовал вызывать команду и перенаправлять вывод в тот же файл

os.system( "ls 1>>%s" % sys.stdout.name )

но получается странный эффект, то, что выводится командой print попадает в начало файла, то, что выводится по system попадает в конец файла. Даже если print вызывается после system.

Выглядит потом некрасиво.

Пробовал так же popen4

(cin,cout) = os.popen4( "myscript.sh", 0 )

for l in cout: print l[:-1]

но выхлоп myscript.sh появляется в логе, только после того как myscript.sh завершит свою работу, а скрипт долгоиграющий, и мне надо показывать результат между дел. Короче тоже не то.

Есть еще какие то варианты?

Спасибо

Например, используй модуль commands.

>>> import commands

>>> commands.getstatusoutput('ls /bin/ls')

(0, '/bin/ls')
>>> commands.getstatusoutput('cat /bin/junk')

(256, 'cat: /bin/junk: No such file or directory')
>>> commands.getstatusoutput('/bin/junk')

(256, 'sh: /bin/junk: not found')
>>> commands.getoutput('ls /bin/ls')

'/bin/ls'
>>> commands.getstatus('/bin/ls')

'-rwxr-xr-x 1 root 13352 Oct 14 1994 /bin/ls'

Соответственно, выхлоп ручками записывай в файл и не забывай делать flush().

kondor ★★★
()
Ответ на: комментарий от Pi

делаю,

проблема не в том, что выводимое print.ом в файле попадает после выводимого system, проблема в том, что выводимое system попадает все время в конец файла. Даже если print команда следует после вызова system.

the_moon
() автор топика
Ответ на: комментарий от kondor

<> import commands

тот же, только вид с боку

Проблема с popen в том, что пока команда не выполнится, получить выхлоп испольняемой команды не получается.

Пока в голову приходят сложносочиенные комбинайии, с форками, перенаправлением вывода в файл и чтение содержимого их файла пучками, по мере появления новых строк и вывод оных в stdout.

Типа того

the_moon
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.