Python

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: 

wnfKameradownload gphoto 1.07

Da die Kamera NIKON D3100 sich nur im PTP-Modus betreiben lässt, habe ich ein neues Script geschrieben, dass die Bilder mit Hilfe von gphoto (piggyphoto) herunterlädt.

../bilder/wnfkameradownloadgphoto_107

Hinweis:

In der Datei piggyphoto/init.py muss der Pfad zu gphoto eingestellt werden. Der Pfad kann z.B. gesucht werden mit

$ locate libgphoto2.so  

für Kubuntu 12.04 LTS

libgphoto2dll = '/usr/lib/x86_64-linux-gnu/libgphoto2.so.2'  

für Suse 12.3

libgphoto2dll = '/usr/lib64/libgphoto2.so'  

Nikon D3100 und piggyphoto

$ python "list-config.py"  
Model : Nikon DSC D3100 (PTP mode)  
Status : 0  
Port : 4  
Operations : 17  
File Operations : 10  
Folder Operations : 14  
USB (vendor/product) : 0x4b0/0x427  
USB class : 0x0/0x0/0x0  
Library : /usr/lib/x86_64-linux-gnu/libgphoto2/2.4.13/ptp2  
Id : PTP  

main.actions = None  
main.settings.datetime = 1365831834  
main.settings.fastfs = 1  
main.settings.capturetarget = Internal RAM  
main.status.batterylevel = 100%  
main.imgsettings.imagesize = 4608x3072  
main.imgsettings.iso = 100  
main.imgsettings.whitebalance = Automatic  
main.capturesettings.exposurecompensation = 0  
main.capturesettings.flashmode = Auto  
main.capturesettings.f-number = f/4.8  
main.capturesettings.imagequality = JPEG Normal  
main.capturesettings.focallength = 1108869120  
main.capturesettings.focusmode = AF-A  
main.capturesettings.expprogram = Auto  
main.capturesettings.capturemode = Single Shot  
main.capturesettings.focusmetermode = Closest Subject  
main.capturesettings.exposuremetermode = Multi Spot  
main.capturesettings.shutterspeed = 0.2500s  
main.capturesettings.burstnumber = 1065353216  
main.other.5001 = 100  
main.other.5003 = 4608x3072  
main.other.5004 = 1  
main.other.5005 = 2  
main.other.5007 = 480  
main.other.5008 = 1164804096  
main.other.500a = 32786  
main.other.500b = 3  
main.other.500c = 32784  
main.other.500d = 2500  
main.other.500e = 32784  
main.other.500f = 100  
main.other.5010 = 0  
main.other.5011 = 20130413T064354  
main.other.5013 = 1  
main.other.5018 = 1  
main.other.501c = 32785  
main.other.d303 = 1  
main.other.d406 = Windows/6.0.5330.0 MTPClassDriver/6.0.5330.0  
main.other.d407 = 1  

Seiten