ubuntuusers.de

Inhalt einer Textdatei in einer Variable speichern

Status: Ungelöst | Ubuntu-Version: Ubuntu 16.10 (Yakkety Yak)
Antworten |

ScrexX

Anmeldungsdatum:
28. Juni 2017

Beiträge: 6

Hallo zusammen,

ist es möglich, den Inhalt einer Textdatei in einer Variablen zu speichern (inklusive Zeilenumbrüche)?

Ich möchte den Inhalt mir anschließend per Telegram-Bot zusenden.

verdooft

Anmeldungsdatum:
15. September 2012

Beiträge: 4399

Hier geht das so:

variable=$(<test)

zumindest zeigt

echo "$variable"

dann die komplette Textdatei an. (test ist die Textdatei)

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13177

Herzlich willkommen hier im Forum ScrexX!

verdooft schrieb:

variable=$(<test)

Das funktioniert nicht in allen Shells. Wenn man die sh benutzt (z.B. in einem Skript) nutzt man cat dafür:

1
variable=$(cat test)

zumindest zeigt

echo "$variable"

dann die komplette Textdatei an. (test ist die Textdatei)

Ja, und das Quoting ist wichtig.

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11250

Wohnort: München

Je nachdem wie umfangreich der Bot insgesamt werden soll, könnte man das auch mit python-telegram-bot/python-telegram-bot machen, das hat u.a. den Vorteil, dass man sich nicht darum kümmern muss den Text für die von der API genutzte URL zu encodieren:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#!/usr/bin/env python3
import argparse
import telegram

chat_id = XXXXXXXXXXXXXXXX
token = 'secret token'

parser = argparse.ArgumentParser()
parser.add_argument("file", description='file to send as text')
args = parser.parse_args()

bot = telegram.Bot(token=token)

with open(args.file) as f:
    bot.send_message(chat_id=chat_id, text=f.read())

ScrexX

(Themenstarter)

Anmeldungsdatum:
28. Juni 2017

Beiträge: 6

Hallo zusammen,

vielen Dank für die schnellen Rückmeldungen, ich werde es damit mal testen.

Gruß, ScrexX

ScrexX

(Themenstarter)

Anmeldungsdatum:
28. Juni 2017

Beiträge: 6

seahawk1986 schrieb:

Je nachdem wie umfangreich der Bot insgesamt werden soll, könnte man das auch mit python-telegram-bot/python-telegram-bot machen, das hat u.a. den Vorteil, dass man sich nicht darum kümmern muss den Text für die von der API genutzte URL zu encodieren:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#!/usr/bin/env python3
import argparse
import telegram

chat_id = XXXXXXXXXXXXXXXX
token = 'secret token'

parser = argparse.ArgumentParser()
parser.add_argument("file", description='file to send as text')
args = parser.parse_args()

bot = telegram.Bot(token=token)

with open(args.file) as f:
    bot.send_message(chat_id=chat_id, text=f.read())

Wo wird hier die Datei übergeben?

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11250

Wohnort: München

Als Argument für das Skript (wie einem auch die generierte Hilfe für das Skript verrät):

$ python3 test2.py -h
usage: test2.py [-h] file

positional arguments:
  file        file to send as text

optional arguments:
  -h, --help  show this help message and exit 

Edit: in Zeile 9 muss es help= statt description= heißen.

ScrexX

(Themenstarter)

Anmeldungsdatum:
28. Juni 2017

Beiträge: 6

Leider kenn ich mich mit Python noch nicht so gut aus. Ich erhalte folgende Fehlermeldung

Traceback (most recent call last):
  File "telegram_message.py", line 3, in <module>
    import telegram
  File "/var/script/python-telegram-bot/telegram/__init__.py", line 44, in <module>
    from .files.file import File
  File "/var/script/python-telegram-bot/telegram/files/file.py", line 22, in <module>
    from future.backports.urllib import parse as urllib_parse
ImportError: No module named 'future'

Könnt ihr mir weiterhelfen?

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11250

Wohnort: München

Wie genau hast du das telegram-Modul installiert? Laut der Meldung wurden da die benötigten Abhängigkeiten nicht installiert.

Ich würde das über pip machen - wenn man das Modul und seine Abhängigkeiten für Python3 systemweit verfügbar machen wollte, ginge das gemäß pip und python-telegram-bot/python-telegram-bot so:

sudo -H python3 -m pip install python-telegram-bot --upgrade 

ScrexX

(Themenstarter)

Anmeldungsdatum:
28. Juni 2017

Beiträge: 6

seahawk1986 schrieb:

Wie genau hast du das telegram-Modul installiert? Laut der Meldung wurden da die benötigten Abhängigkeiten nicht installiert.

Ich würde das über pip machen - wenn man das Modul und seine Abhängigkeiten für Python3 systemweit verfügbar machen wollte, ginge das gemäß pip und python-telegram-bot/python-telegram-bot so:

sudo -H python3 -m pip install python-telegram-bot --upgrade 

Hallo seahawk1986, vielen Dank für die Hilfe hat super funktioniert.

Gruß, ScrexX

ScrexX

(Themenstarter)

Anmeldungsdatum:
28. Juni 2017

Beiträge: 6

Guten Abend zusammen,

habt ihr eine Idee wie ich über den Bot Status abfragen an meinen Server schicken kann?

Gruß ScrexX

Antworten |