Open/Star/Libreoffice может получать данные из STDIN через мост Python-UNO. Входные данные затем могут попасть в любой документ Libreoffice, здесь это документ Writer.
Это было протестировано на Ubuntu 16.04 с Libreoffice5. Вам нужен интерпретатор python, в который включены библиотеки uno! Libreoffice должен быть запущен как служба:
# soffice "--accept=socket,host=localhost,port=2002;urp;" --writer
# echo "test" | ./reader_uno.py
#!/usr/bin/python3
import sys
import uno
localContext = uno.getComponentContext()
resolver = localContext.ServiceManager.createInstanceWithContext(
"com.sun.star.bridge.UnoUrlResolver", localContext )
# connect to the running office
ctx = resolver.resolve( "uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext" )
smgr = ctx.ServiceManager
# get the central desktop object
desktop = smgr.createInstanceWithContext( "com.sun.star.frame.Desktop",ctx)
# access the current writer document
model = desktop.getCurrentComponent()
# access the document's text property
text = model.Text
# create a cursor
cursor = text.createTextCursor()
# read from STDIN and insert the text into the document
for line in sys.stdin:
sys.stdout.write(line)
text.insertString(cursor,line, 0 )
ctx.ServiceManager
Более подробную информацию можно найти в моем блоге "bitkistl".
http://www.bitkistl.com/2016/02/libreopenstaroffice-hints-and-tips.html
Символ :
не имеет специального значения в имени файла *nix. Допускаются любые символы, кроме NUL и /
(несколько символов необходимо экранировать при вводе или передаче в команды, особенно пробелы и символы новой строки, но они все еще разрешены).
В вашем примере D:
— это обычный файл!
Это работает, потому что D:
является допустимым именем каталога в Linux (и POSIX в целом). Для Linux это не имеет никакого значения.
(Некоторые программы будут обрабатывать определенные каталоги с такими именами по-особому, в соответствующем каталоге; например, Wine ожидает такие каталоги в каталоге dosdevices
внутри префикса Wine. Но это характерно для Wine, а не что-то, навязываемое Linux.)