Python

pyperclip unter Kubuntu 18.04

Mit pyperclip möchte ich einen Text ins Clipboard kopieren.


import pyperclip

def main():
    aClipboard = "Dieser Text soll ins Clipboard"
    print(aClipboard)
    pyperclip.copy(aClipboard)
    print("beendet.")
    return 0

if __name__ == '__main__':
    main()

Das Script liefert die folgenden Warnungen und der Text wird nicht ins Clipboard kopiert.
Dieser Text soll ins Clipboard

(test_pyperclip.py:17789): Gtk-WARNING **: 06:38:59.827: Theme parsing error: gtk.css:68:35: 
The style property GtkButton:child-displacement-x is deprecated and shouldn't be used anymore. 
It will be removed in a future version

(test_pyperclip.py:17789): Gtk-WARNING **: 06:38:59.827: Theme parsing error: gtk.css:69:35: 
The style property GtkButton:child-displacement-y is deprecated and shouldn't be used anymore. 
It will be removed in a future version

(test_pyperclip.py:17789): Gtk-WARNING **: 06:38:59.827: Theme parsing error: gtk.css:73:46: 
The style property GtkScrolledWindow:scrollbars-within-bevel is deprecated and shouldn't be used anymore.
 It will be removed in a future version
beendet.

Da ich die KDE benutze gehe ich davon aus, dass pyperclip das falsche Clipboard anspricht.
Mit **pyperclip.set_clipboard('klipper')** kann pyperclip dazu übereredet werden klipper als Clipboard zu benutzen:

import pyperclip

def main():
    aClipboard = "Dieser Text soll ins Clipboard"
    print(aClipboard)
    pyperclip.set_clipboard('klipper')
    pyperclip.copy(aClipboard)
    print("beendet.")
    return 0

if __name__ == '__main__':
    main()

Tags: 

Python-Script Play All My Mp3s

Aus der Musiksammlung im Verzeichnis PATH werden 100 zufällige Titel abgespielt.

Als MP3-Player dient mpg123 (der natürlich vorher installiert werden muss)

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
import os
from glob import glob
import random
import subprocess

PATH = '/wnfdaten/Musik/'

def playMp3(path):
    subprocess.Popen(['mpg123', '-q', path]).wait()

def allMp3s():
    print(PATH)
    result = [y for x in os.walk(PATH) for y in glob(os.path.join(x[0], '**/*.mp3'))]
    return result

def main():
    alle = allMp3s()
    anz=0
    while anz<100:
        dn=random.choice(alle)
        print(anz,dn)
        playMp3(dn)
        anz = anz +1
    return anz

if __name__ == '__main__':
    main()

Auf dem QL-570 unter PyQT drucken

Literatur:

So funktioniert es: handleQL570

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from PyQt4 import QtGui, QtCore

class Window(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        self.setWindowTitle(self.tr('Document Printer'))
        self.editor = QtGui.QTextEdit(self)
        self.editor.textChanged.connect(self.handleTextChanged)
        self.buttonQL570 = QtGui.QPushButton('QL-570', self)
        self.buttonQL570.clicked.connect(self.handleQL570)
        self.buttonPrint = QtGui.QPushButton('Print', self)
        self.buttonPrint.clicked.connect(self.handlePrint)
        self.buttonPreview = QtGui.QPushButton('Preview', self)
        self.buttonPreview.clicked.connect(self.handlePreview)
        layout = QtGui.QGridLayout(self)
        layout.addWidget(self.editor, 0, 0, 1, 3)
        layout.addWidget(self.buttonQL570, 1, 0)
        layout.addWidget(self.buttonPrint, 1, 1)
        layout.addWidget(self.buttonPreview, 1, 2)
        self.beispielText()
        self.handleTextChanged()

    def beispielText(self):
        self.editor.clear()
        self.editor.setHtml(u'Vorname Name<br>Straße<br><strong>PLZ Ort</strong>')

    def handlePrint(self):
        dialog = QtGui.QPrintDialog()
        if dialog.exec_() == QtGui.QDialog.Accepted:
            self.editor.document().print_(dialog.printer())

    def handlePreview(self):
        dialog = QtGui.QPrintPreviewDialog()
        dialog.paintRequested.connect(self.editor.print_)
        dialog.exec_()

    def handleQL570(self):
        tp = QtGui.QPrinter()
        # Es muss natürlich einen eingerichteten Drucker  mit dem Namen geben
        tp.setPrinterName('QL-570')
        # Das Setzen der Papiergröße funktioniert nicht,
        # es wir die im Druckertreiber eingestellte Papiergröße verwendet
        # Ohne Wirkung: tp.setPaperSize( QtCore.QSizeF( 29, 62 ), QtGui.QPrinter.Millimeter )
        tp.setOrientation( QtGui.QPrinter.Landscape)
        tp.setPageMargins(2,2,2,2, QtGui.QPrinter.Millimeter)
        self.editor.document().print_(tp)

    def handleTextChanged(self):
        enable = not self.editor.document().isEmpty()
        self.buttonPrint.setEnabled(enable)
        self.buttonPreview.setEnabled(enable)

if __name__ == '__main__':

    import sys
    app = QtGui.QApplication(sys.argv)
    window = Window()
    window.resize(640, 480)
    window.show()
    sys.exit(app.exec_())

Phyton und die KDE-Brieftasche (kwallet)

Literatur:

Um von Python aus Passwörter aus der KDE-Brieftasche zu lesen genügen diese paar Zeilen:

import keyring
# Setzen des Passwortes
keyring.set_password("ftp.wlsoft.de","wlsoft.de", "123")
# Lesen des Passwortes
password = keyring.get_password("ftp.wlsoft.de","wlsoft.de")

Oder hier am Beispiel eines Scripts zum Hochladen einer Datei per FTP auf diesen Server.

import keyring

KEYRING_SERVICE = "ftp.wlsoft.de"
KEYRING_USERNAME = "wlsoft.de"

def main():
    if len(sys.argv) < 2:
        sys.exit('Usage: %s filename' % sys.argv[0])
    filename = sys.argv[1]
    if not os.path.exists(filename):
        sys.exit('ERROR: File %s was not found!' % filename)
    ftp_host = KEYRING_SERVICE
    ftp_user = KEYRING_USERNAME
    #Das Passwort aus Standard-Keyring lesen (unter KDE ist das kwallet)
    ftp_pass = keyring.get_password(KEYRING_SERVICE,KEYRING_USERNAME)
    if (ftp_pass==''):
        sys.exit('Set Keyring Password for SERVICE %s USERNAME %s' % (KEYRING_SERVICE,KEYRING_USERNAME))
    ftp = FTP(ftp_host, ftp_user, ftp_pass)
    ftp.cwd("/downloads/htdocs/")
    s,n = os.path.split(filename)
    s = 'STOR %s' % (n)
    #print s
    ftp.storbinary(s, open(filename, 'rb'))
    return 0

if __name__ == '__main__':
    main()

wnfKameradownload 1.12

Das Script wnfkameradownlo­ad.py dient zum Herunterladen von Bildern von einer Digitalkamera für das Programm wnfAlbum.

$ sudo add-apt-repository ppa:r-dev/wnfkameradownload
$ sudo apt-get update
$ sudo apt-get install wnfkameradownload
default alt. text

Das Script wnfkameradownlo­ad.py kann

  • Bilder nach dem herunterladen entsprechend der exif-Daten des Bildes drehen. Dazu wir der Befehl exifautotran benutzt, welches in jeder Linux-Distribution vorinstalliert sein sollte.
  • Bilder umbenennen, so dass die Dateinamen das Format vorsilbe_jjjj_mm_t­t_hh_mm_ss_ori­ginalname.ori­ginalerweiterung erhalten. Das ist günstig für den Fall, dass ein Ereignis von mehreren Fotografen abgelichtet wurde. So kommen die Fotos auch für Programme, die die Fotos nach Dateinamen sortieren in die richtige Reihenfolge.
  • Bilder aus Unterverzeichnissen einer Digitalkamera herunterladen. (Also das Kameraverzeichnis am besten auf das DCIM Verzeichnis der Kamera stelle. Bei mir unter Kubuntu 9.10 ist es das Verzeichnis /media/disk/DCIM. Wenn das Programm über die KDE-Geräteüberwachung aufgerufen wird, geschieht das automatisch)
  • Bilder im Silvestermodus von der Kamera herunterladen. So werden zum Beispiel die Fotos vom Silvesterfeuerwerk nicht mehr auf den Neujahrstag verschoben.

Um das Script unter KDE 4.x einzubinden, muss für die Geräteüberwachung eine Aktion eingerichtet werden.

  • KDE-Systemeinstellungen-erweitert-Geräteaktionen-hinzufügen
  • Aktion: wnfKameraDownload
  • Befehl: pfad/wnfkamera­download.py %f
  • Parameter: Das Gerät muss ein Storagevolume (Massenspeicher) se­in.

Um das Script unter Ubuntu – Gnome zu nutzen muss das Paket python-qt4 installiert sein.

Historie

26.01.2014 Version 1.12

  • Das zuletzt benutzte Zielverzeichnis zur Kamera wird sich gemerkt.

    (Das wirkt sich natürlich nur aus,
    wenn mit mehreren Kameras gearbeitet wird.)

26.12.2013 Version 1.11

  • PTP-Download umgestellt auf gphotofs

    (gphotofs ist beim Download schneller als piggyphoto)

19.11.2013 Version 1.09

  • Versteckte Verzeichnisse und Dateien werden jetzt ignoriert

    (Handys (Android) haben davon eine Menge)

17.11.2013 Version 1.08

  • Aufrufparameter -p Pfadname_auf_der_Ka­mera eingeführt
  • Es wird nur das DCIM verzeichnis eingelesen,

    wenn es als Unterverzeichnis vorhanden ist

    ansonsten wird das gesamte Verzeichnis eingelesen.

03.11.2013 Version 1.07

  • Der Parameter %f beim Aufruf über die KDE-Geräteüberwachung wird jetzt ausgewertet, so dass der Quellpfad beim Anschluss von verschiedenen Kameras automatisch gesetzt wird.

01.01.2011 Version 1.04

  • Aus aktuellem Anlass, wurde die Silvesterfunktion überarbeitet.

01.12.2010 Version 1.02

  • Erstveröffentlichung

bbb lighttpd und python

Zum nachlesen

Kochbuch

$ sudo apt-get install lighttpd
  • diverse Änderungen in /etc/lighttpd/lig­httpd.conf
$ sudo nano /etc/lighttpd/lighttpd.conf
  • mod_cgi hinzufügen
server.modules = (
        "mod_access",
        "mod_alias",
        "mod_compress",
        "mod_redirect",
#       "mod_rewrite",
        "mod_cgi",
)
  • Python dem cgi-Modul zur Verfügung stellen
cgi.assign = ( ".py" => "/usr/bin/python" )
static-file.exclude-extensions = ( ".php", ".pl", ".fcgi", ".py" )
  • Das Verzeichnis /var/www/cgi-bin anlegen
$ sudo mkdir /var/www/cgi-bin
$ sudo /etc/init.d/lighttpd restart
  • In diesem Verzeichnis dieses Python Script ablegen (mit freundlicher Unterstützung von planzero.org
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#http://planzero.org/blog/2012/01/26/system_uptime_in_python,_a_better_way

from datetime import timedelta

print "Content-Type: text/html"
print
print "<title>Uptime des Beaglebone Black</title>"
print "<h1>Uptime des Beaglebone Black</h1>"

with open('/proc/uptime', 'r') as f:
    uptime_seconds = float(f.readline().split()[0])
    uptime_string = str(timedelta(seconds = uptime_seconds))

print(uptime_string)

Testaufruf mit http://bone.nfix.de/…wnfuptime.py

Unter Suse 13.1 ein rpm Paket erstellen (wnfkameradownload)

Literatur:

python setup.py bdist_rpm

liefert folgenden Fehler:

building RPMs
rpm -ba --define _topdir /tmp/erstellung/programm/build/bdist.linux-x86_64/rpm --clean build/bdist.linux-x86_64/rpm/SPECS/wnfkameradownload.spec
rpm: -ba: Unbekannte Option
error: command 'rpm' failed with exit status 1

Hier die Erklärung dazu:

  • http://bugs.python.org/issue11122
  • python setup ruft rpm-build auf, wenn das nicht installiert ist, dann wird rpm aufgerufen und rpm kennt -ba nicht.
  • Also rpm-build nach installieren .

Python und KDE4-Plasmoid

Zur Beachtung in KDE4.2.x plasmoidviewer kann nur installierte Plasmoide anzeigen.

$ plasmoidviewer --version  
Qt: 4.5.0  
KDE: 4.2.4 (KDE 4.2.4)  
Plasma Widget Viewer: 1.0  

unter Suse 13.1 und KDE 4.11

plasma-windowed --version
Qt: 4.8.5
KDE: 4.11.2
Plasma-Shell: 0.1
Tags: 

Seiten